Wenn ich eine große Anzahl von SQLite-Datenbanken mit demselben Schema habe, wie lassen sich diese am besten zusammenführen, um eine Abfrage für alle Datenbanken durchzuführen?
Ich weiß, dass es möglich ist, ATTACH zu verwenden, aber es gibt ein Limit von 32 und 64 Datenbanken, abhängig vom Speichersystem auf dem Computer.
detach toMerge;
nach dem Festschreiben.Dies würde auf Anfrage mehrmals täglich erfolgen. Ich würde es so sehen, wie in http://sqlite.1065341.n5.nabble.com/Attempting-to-merge-large-databases-td39548.html, wo die Datenbanken zu einer großen Datenbank zusammengeführt werden und dann wurde die große Datenbank gelöscht.
quelle
Obwohl dies ein sehr alter Thread ist, ist dies immer noch eine relevante Frage in den heutigen Programmieranforderungen. Ich poste dies hier, weil noch keine der Antworten präzise, einfach und direkt ist. Dies ist für Googler, die auf dieser Seite landen. GUI wir gehen:
Ctrl + O
Tastenkombination hinzuCopy
und gehen Sie dann zur Zieldatenbank in der Liste der geladenen Datenbankdateien (oder erstellen Sie bei Bedarf eine neue). Klicken Sie mit der rechten Maustaste auf die Zieldatenbank und klicken Sie aufPaste
Ich war beeindruckt zu erkennen, dass solch eine entmutigende Aufgabe mit der alten Programmierfähigkeit namens Kopieren und Einfügen gelöst werden kann :)
quelle
Wenn Sie diesen Zusammenführungsvorgang nur einmal ausführen müssen (um eine neue größere Datenbank zu erstellen), können Sie ein Skript / Programm erstellen, das alle Ihre SQLite-Datenbanken schleift und die Daten dann in Ihre Hauptdatenbank (große Datenbank) einfügt.
quelle
Späte Antwort, aber Sie können verwenden:
#!/usr/bin/python import sys, sqlite3 class sqlMerge(object): """Basic python script to merge data of 2 !!!IDENTICAL!!!! SQL tables""" def __init__(self, parent=None): super(sqlMerge, self).__init__() self.db_a = None self.db_b = None def loadTables(self, file_a, file_b): self.db_a = sqlite3.connect(file_a) self.db_b = sqlite3.connect(file_b) cursor_a = self.db_a.cursor() cursor_a.execute("SELECT name FROM sqlite_master WHERE type='table';") table_counter = 0 print("SQL Tables available: \n===================================================\n") for table_item in cursor_a.fetchall(): current_table = table_item[0] table_counter += 1 print("-> " + current_table) print("\n===================================================\n") if table_counter == 1: table_to_merge = current_table else: table_to_merge = input("Table to Merge: ") return table_to_merge def merge(self, table_name): cursor_a = self.db_a.cursor() cursor_b = self.db_b.cursor() new_table_name = table_name + "_new" try: cursor_a.execute("CREATE TABLE IF NOT EXISTS " + new_table_name + " AS SELECT * FROM " + table_name) for row in cursor_b.execute("SELECT * FROM " + table_name): print(row) cursor_a.execute("INSERT INTO " + new_table_name + " VALUES" + str(row) +";") cursor_a.execute("DROP TABLE IF EXISTS " + table_name); cursor_a.execute("ALTER TABLE " + new_table_name + " RENAME TO " + table_name); self.db_a.commit() print("\n\nMerge Successful!\n") except sqlite3.OperationalError: print("ERROR!: Merge Failed") cursor_a.execute("DROP TABLE IF EXISTS " + new_table_name); finally: self.db_a.close() self.db_b.close() return def main(self): print("Please enter name of db file") file_name_a = input("File Name A:") file_name_b = input("File Name B:") table_name = self.loadTables(file_name_a, file_name_b) self.merge(table_name) return if __name__ == '__main__': app = sqlMerge() app.main()
SRC: Tool zum Zusammenführen identischer SQLite3-Datenbanken
quelle
Wenn Sie den unteren Rand dieses Feeds erreicht haben und Ihre Lösung noch nicht gefunden haben, können Sie hier auch die Tabellen von zwei oder mehr SQLite-Datenbanken zusammenführen.
Versuchen Sie zunächst, den DB-Browser für die SQLite-Datenbank herunterzuladen und zu installieren . Versuchen Sie dann, Ihre Datenbanken in zwei Fenstern zu öffnen und sie durch einfaches Ziehen und Ablegen von Tabellen zusammenzuführen. Das Problem ist jedoch, dass Sie jeweils nur eine Tabelle ziehen und ablegen können. Daher ist dies keine Lösung für diese Antwort, aber es kann verwendet werden, um Zeit bei weiteren Suchvorgängen zu sparen, wenn Ihre Datenbank klein ist.
quelle
Ohne Beleidigung, genau wie ein Entwickler zum anderen, befürchte ich, dass Ihre Idee furchtbar ineffizient erscheint. Es scheint mir, dass Sie anstelle der Vereinigung von SQLite-Datenbanken wahrscheinlich mehrere Tabellen in derselben Datenbankdatei speichern sollten.
Wenn ich mich jedoch irre, könnten Sie die Datenbanken anhängen und dann eine ANSICHT verwenden, um Ihre Abfragen zu vereinfachen. Oder erstellen Sie eine In-Memory-Tabelle und kopieren Sie alle Daten (dies ist jedoch in Bezug auf die Leistung noch schlechter, insbesondere wenn Sie über große Datenbanken verfügen).
quelle