多个相同的数据库

时间:2014-05-06 19:53:39

标签: python database sqlite

首先让我首先说我对sql有点新鲜(但是已经做了很长时间的python)。我一直无法在网上找到解决问题的好方法。

问题:

我有一个未定义的数字(尽管可能少于100)我需要查询和合并结果的相同结构的sqlite数据库。数据库本身并不是特别大。

我一直在查看ATTACH命令,并按照本教程中的内容进行操作: http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html

import sqlite3 as lite
Database = "library.db"
con = lite.connect(Database)
con.row_factory = lite.Row
cur = con.cursor()
cur.execute("ATTACH DATABASE 'library.db' As 'db1'")
cur.execute("ATTACH DATABASE 'library2.db' As 'db2'")

cur.execute("""
            SELECT 'db1',* FROM db1.table
            UNION 
            SELECT 'db2',* FROM db2.table
            """)

但似乎应该有一种比在execute命令中明确拼写出每个数据库更好的方法。此外,看起来我可以附加到的数据库数量有限制吗? https://sqlite.org/limits.html

我也看过类似将它们合并到一个大型数据库中的内容: How can I merge many SQLite databases? 但是每次需要进行查询或者许多单个数据库中的一个发生变化时,将数据库合并在一起似乎效率低下。

在我继续走下去的路上之前,我想知道是否有更好的方法可以解决我不知道的这类事情?


有关该项目的其他潜在有用信息:

  • 有两个主要表格。
  • 从db到db的表可以有重复项。
  • 我需要能够在"合并"的列中获取唯一值。数据库。
  • 了解哪个数据库来自哪个数据并不重要。
  • 个别数据库经常更新。
  • 查询"合并"经常建立数据库。

1 个答案:

答案 0 :(得分:0)

您可以使用视图来避免拼写出每个查询中的所有数据库:

CREATE VIEW MyTable_all AS
SELECT 'db1', db1.* FROM db1.MyTable
UNION ALL
SELECT 'db2', db2.* FROM db1.MyTable
...

但是,如果数据库太多,则无法使用ATTACH。 在这种情况下,您必须将所有数据库合并在一起。

如果所有数据库每次都这样做太慢,您可以通过保留每条记录的来源同时同步单个数据库:

DELETE FROM MyTable WHERE SourceDB = 1;
INSERT INTO MyTable SELECT 1, * FROM db1.MyTable;