【发布时间】:2014-05-07 15:59:03
【问题描述】:
首先让我先说我对 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
""")
但似乎应该有比在执行命令中明确拼写每个数据库更好的方法。另外,我可以附加的数据库数量似乎有限制? https://sqlite.org/limits.html
我还研究了将它们合并到一个大型数据库中的方法: How can I merge many SQLite databases? 但是每次需要进行查询或许多单独的数据库之一发生更改时,将数据库合并在一起似乎效率低下。
在我继续前行之前,我想知道对于这种我不知道的事情是否有更好的选择?
有关该项目的其他可能有用的信息:
- 有两个主要表。
- 从 db 到 db 的表可以有重复。
- 我需要能够在“合并”数据库的列中获取唯一值。
- 了解数据来自哪个数据库并不重要。
- 各个数据库会经常更新。
- 经常查询“合并”数据库。
【问题讨论】:
-
似乎您在这些数据库中有很多数据,并且您保持它们稀疏,因为您想避免多个进程争夺对文件的写访问权。也许是时候迁移到像 PostgreSQL 这样功能齐全的 DBMS 并拥有一个可以处理多个写入客户端的数据库了?
-
sqlite 的唯一原因是因为这是数据库的默认格式。它们可以轻松更改为 Postgre,但所有数据库都必须保留为单独的数据库(由个人维护在不同的位置)。我对此没有任何控制权,所以不幸的是,我真正能做的就是访问它们(复制、查询等)