Python - 从一个数据库批量选择并插入到另一个数据库
我想请教一下如何在Python中使用sqlite3来实现这个功能。
简单来说,我有一个过程,它会下载一个临时数据库(temp),然后需要把里面的记录插入到第二个相同的数据库(主数据库)中。同时,还要忽略任何可能出现的重复键错误。
我考虑了两种方案,但不太确定在Python中怎么做比较好。
方案一:
- 创建两个连接和游标对象,分别连接到两个数据库。
从数据库1中选择数据,比如:
dbcur.executemany('SELECT * from table1') rows = dbcur.fetchall()
然后把这些数据插入到数据库2中:
dbcur.execute('INSERT INTO table1 VALUES (:column1, :column2)', rows) dbcon.commit()
当然,这样做是行不通的,因为我不太确定怎么正确地实现这个过程 :)
方案二(我更倾向于这个,但不太确定怎么做):
- 在一个语句中同时进行选择和插入。
另外,我的两个数据库里有四个表,每个表的列数不同,我可以在插入语句中省略列名吗?
关于重复键的问题,我听说可以使用'ON DUPLICATE KEY'来处理,比如:
INSERT INTO table1 VALUES (:column1, :column2) ON DUPLICATE KEY UPDATE set column1=column1
2 个回答
0
选项1的代码看起来是正确的。
如果你需要过滤掉重复的键,可以先把数据插入一个临时表,然后使用SQL命令来去掉重复的部分,再把这些数据合并到目标表中。
6
你可以用下面的代码把两个数据库连接到同一个地方:
import sqlite3
connection = sqlite3.connect('/path/to/temp.sqlite')
cursor=connection.cursor()
cursor.execute('ATTACH "/path/to/main.sqlite" AS master')
在sqlite中没有像MySQL那样的“ON DUPLICATE KEY”语法。这个StackOverflow的问题
所以,如果你想在一个SQL语句中批量插入数据,可以使用类似下面的代码:
cursor.execute('INSERT OR REPLACE INTO master.table1 SELECT * FROM table1')
关于REPLACE和其他冲突处理选项的信息,可以查看这个页面。