如果我有大量的SQLite数据库,都具有相同的模式,那么将它们合并在一起以便对所有数据库执行查询的最佳方法是什么?
顺序如下.假设我要合并a.db和b.db. 在命令行中,我执行以下操作.
它运作良好,但在引用的网站中,提问者询问加速,答案是使用'begin'和'commit'命令.
然后,我想出了以下python代码来完成同样的事情.我用SQLiteDB抽象SQLite函数调用,其中一个方法是runCommand().即使我删除了self.connector.commit(),我也得到了同样的错误.
# run command
def runCommand(self, command):
self.cursor.execute(command)
self.connector.commit() # same error even though I delete this line
db = SQLiteDB('a.db')
cmd = "attach \"%s\" as toMerge" % "b.db"
print cmd
db.runCommand(cmd)
cmd = "begin"
db.runCommand(cmd)
cmd = "insert into benchmark select * from toMerge.benchmark"
db.runCommand(cmd)
cmd = "commit"
db.runCommand(cmd)
cmd = "detach database toMerge"
db.runCommand(cmd)
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误.
OperationalError: cannot commit - …Run Code Online (Sandbox Code Playgroud) 提供了两种解决方案(请参阅底部的链接),但都在我尝试执行的操作中失败:
--------------
| id | name |
--------------
| 1 | Apple |
| 2 | Lemon |
| 3 | Kiwi |
| 4 | Banana|
--------------
Run Code Online (Sandbox Code Playgroud)
果汁
----------------
| id | name |
----------------
| 1 | Juice A |
| 2 | Juice B |
----------------
Run Code Online (Sandbox Code Playgroud)
配方(接线台)
----------------------------
| id | juice_id | fruit_id |
----------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | …Run Code Online (Sandbox Code Playgroud) 我有多个数据库文件,它们存在于多个位置,结构完全相同.我理解attach函数可以用于将多个文件连接到一个数据库连接,但是,它将它们视为单独的数据库.我想做的事情如下:
SELECT uid, name FROM ALL_DATABASES.Users;
Run Code Online (Sandbox Code Playgroud)
也,
SELECT uid, name FROM DB1.Users UNION SELECT uid, name FROM DB2.Users ;
Run Code Online (Sandbox Code Playgroud)
不是一个有效的答案,因为我需要合并任意数量的数据库文件.最后,数据库文件必须保持独立.有谁知道怎么做到这一点?
编辑:一个答案给了我一个想法:是否可以创建一个视图,它是所有不同表的组合?是否可以查询所有数据库文件以及它们"挂载"的数据库,然后在视图查询中使用它来创建"主表"?