相关疑难解决方法(0)

最快的方式合并两个SQLITE数据库

我有3个SQLite DB,每个都有与表结构完全相同的7个表组.[它们是来自3种不同机器的日志转储].

我想将它们组合成一个SQLite DB,具有相同的7个表,但每个表应该具有来自所有三个DB的组合数据.因为我想在其中的3个中运行查询.什么是最好,最快的方法.

sql sqlite

12
推荐指数
2
解决办法
3万
查看次数

如何在Python中附加内存中的SQLite数据库?

我想合并SQLite数据库,有些可能在内存中.我通过将数据库路径指定为来创建内存数据库:memory:.在这篇文章之后,使用attachSQLite 的功能似乎是一种简单而有效的方法.但是如何指定我的内存数据库作为附加源?

例如,我想做类似的事情:

c1 = sqlite3.connect(":memory:")
c1.execute(...create table, insert a bunch, commit...)

c2 = sqlite3.connect(":memory:")
c2.execute("""
  ATTACH ? AS ToMerge;
  BEGIN; 
    INSERT INTO Records SELECT * FROM ToMerge.Records; 
  COMMIT;
""", (c1.get_attach_id(), ))
Run Code Online (Sandbox Code Playgroud)

但是,当然,这c1.get_attach_id()是我为演示目的而制作的一种方法,因为使用字符串:memory:会很模糊.如何指定现有c1数据库?

python sqlite

8
推荐指数
1
解决办法
5484
查看次数

将SQLite文件合并到一个db文件中,然后"开始/提交"问题

这篇文章引用了这个用于合并SQLite数据库的页面.

顺序如下.假设我要合并a.db和b.db. 在命令行中,我执行以下操作.

  • sqlite3 a.db
  • 将'b.db'附加到M;
  • 开始; < -
  • 插入基准select*from toM.benchmark;
  • 承诺; < -
  • 分离数据库toM;

它运作良好,但在引用的网站中,提问者询问加速,答案是使用'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)

python sqlite merge

5
推荐指数
1
解决办法
1万
查看次数

Sqlite将数据库合二为一,具有唯一值,保留外键关系

提供了两种解决方案(请参阅底部的链接),但都在我尝试执行的操作中失败:

1. 给定数据库中的表(相同)结构,例如:

数据库1

水果
--------------
| 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)

sql database sqlite merge

4
推荐指数
1
解决办法
1万
查看次数

如何在SQLite中合并多个数据库文件?

我有多个数据库文件,它们存在于多个位置,结构完全相同.我理解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)

不是一个有效的答案,因为我需要合并任意数量的数据库文件.最后,数据库文件必须保持独立.有谁知道怎么做到这一点?

编辑:一个答案给了我一个想法:是否可以创建一个视图,它是所有不同表的组合?是否可以查询所有数据库文件以及它们"挂载"的数据库,然后在视图查询中使用它来创建"主表"?

sql sqlite multiple-databases

3
推荐指数
1
解决办法
2万
查看次数

将所有SQLite数据库与不同的表合并

是否有一种廉价/快速的方法将SQLite数据库文件与不同的表合并?

例如:

  • a.db 只有桌子 a
  • b.db 只有桌子 b
  • ...

我想这些合并成一个abcd.db包含所有a,b,c,和d.

我想我想要的是这样一个神奇的剧本:

merge_script a.db b.db c.db d.db -o abcd.db
Run Code Online (Sandbox Code Playgroud)

我已经注意到这个提示和另一个技巧和ATTACH技巧,它将所有记录插入"主"数据库,但是我可以在"主"数据库中没有表时执行此操作吗?

UPDATE

我使用SQLIte数据库文件作为简单的存储容器.

在大多数情况下,我将每种类型的数据(不同于表名)存储在一个文件中,然后将它们合并到"目标"数据库中.

但是有些类型的数据应该在同一个表名中.如果使用sqlite3 .dump,那么tablename就会发生冲突.

然而,这种.dump方法非常简单,我只是做一些解决方法并使用它.

python sqlite merge

3
推荐指数
1
解决办法
1769
查看次数

标签 统计

sqlite ×6

merge ×3

python ×3

sql ×3

database ×1

multiple-databases ×1