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)
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()
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()