def runner(self):
        db = Table(self.db_file)
        conn = db.create_connection()
        current_table = db.choose_table(self.sps_file)
        parser = Sps21Parser()

        with open(self.sps_file) as f:
            for line in f:
                parsed = parser.parse_point(line)
                if parsed is not None:
                    key_list = [parsed[1], parsed[2], parsed[3]]
                    get_record = db.get_record_for_point(
                        conn, current_table, key_list)
                    print(get_record)
示例#2
0
class DbUpdate(QRunnable):
    def __init__(self, db_file, conn, file_name):
        super().__init__()
        self.conn = conn
        self.file_name = file_name
        self.db_file = db_file

        self.signals = WorkerSignal()
        self.db = Table(self.db_file)
        self.parser = Sps21Parser()

    @pyqtSlot()
    def run(self):

        self.signals.start.emit(False)
        line_numbers = check.iter_count(self.file_name)
        # print(line_numbers)
        self.signals.process_max.emit(line_numbers)
        table_name = self.db.choose_table(self.file_name)
        self.conn.execute("PRAGMA synchronous=OFF")  # 关闭同步
        self.conn.execute("BEGIN TRANSACTION")  # 显式开启事务
        counter = 0
        try:
            c = self.conn.cursor()
            with open(self.file_name) as fr:
                for line in fr:
                    parsed = self.parser.parse_point(line)
                    if parsed:
                        sql_insert = "INSERT OR REPLACE INTO " + table_name + " (line, point, idx, easting, northing, elevation) VALUES (?, ?, ?, ?, ?, ?);"
                        data = covert_parsed_to_point(parsed)
                        c.execute(sql_insert, data)
                    counter += 1
                    if counter % 100000 == 0:
                        self.signals.process.emit(counter)
                        self.conn.commit()
        except Exception as e:
            print(str(e))
        self.signals.process.emit(counter)
        self.signals.finished.emit(True)
        self.conn.commit()
        c.close()
示例#3
0
class DbXUpdate(QRunnable):
    def __init__(self, db_file, conn, file_name):
        super().__init__()
        self.conn = conn
        self.file_name = file_name
        self.db_file = db_file

        self.signals = WorkerSignal()
        self.db = Table(self.db_file)
        self.parser = Sps21Parser()

    @pyqtSlot()
    def run(self):

        self.signals.start.emit(False)
        line_numbers = check.iter_count(self.file_name)
        self.signals.process_max.emit(line_numbers)
        table_name = self.db.choose_table(self.file_name)
        self.conn.execute("PRAGMA synchronous=OFF")  # 关闭同步
        self.conn.execute("BEGIN TRANSACTION")  # 显式开启事务
        counter = 0
        tcounter = 0
        try:
            c = self.conn.cursor()
            osln = 0
            ospn = 0
            osidx = 0
            with open(self.file_name) as fr:
                for line in fr:
                    counter += 1
                    parsed = self.parser.parse_relation(line)
                    if parsed:
                        xps = convert_parsed_to_xps(parsed)
                        sln = parsed[5]
                        spn = parsed[6]
                        spidx = parsed[7]
                        if sln == osln and spn == ospn and spidx == osidx:
                            relation.append(xps)
                        else:
                            if osln != 0:
                                sql_insert = "INSERT OR REPLACE INTO " + table_name + " (line, point, idx, relation) VALUES (?, ?, ?, ?);"
                                data = (osln, ospn, osidx, str(relation))
                                c.execute(sql_insert, data)
                                tcounter += 1
                            relation = []
                            relation.append(xps)
                            osln = sln
                            ospn = spn
                            osidx = spidx

                        if tcounter % 10000 == 0:
                            self.signals.process.emit(counter)
                            self.conn.commit()

                if osln != 0:
                    sql_insert = "INSERT OR REPLACE INTO " + table_name + " (line, point, idx, relation) VALUES (?, ?, ?, ?);"
                    data = (osln, ospn, osidx, str(relation))
                    c.execute(sql_insert, data)

        except Exception as e:
            print(str(e))
        self.signals.process.emit(counter)
        self.signals.finished.emit(True)
        self.conn.commit()
        c.close()