Python批量选择然后从一个DB插入到另一个DB

2024-05-14 00:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一些关于如何使用sqlite3在Python中实现这一点的帮助

基本上,我有一个进程,下载一个数据库(temp),然后需要将它的记录插入第二个相同的数据库(主数据库)。。同时忽略/绕过任何可能的重复键错误

我考虑了两个场景,但不确定如何在Python中最好地实现这一点

选项1:

  • 创建2个连接和游标对象,每个数据库1个
  • 从数据库1中选择例如:

    dbcur.executemany('SELECT * from table1')
    rows = dbcur.fetchall()
    
  • 将它们插入DB 2中:

    dbcur.execute('INSERT INTO table1 VALUES (:column1, :column2)', rows)
    dbcon.commit()
    

当然,这不起作用,因为我不确定如何正确地执行它:)

选项2(我更喜欢,但不知道如何做):

  • 在1语句中选择并插入

另外,我在数据库中有4个表,每个表都有不同的列,我可以跳过在INSERT语句中命名列吗?在

至于重复的密钥,我已经读到我可以使用“ON duplicate KEY”来处理 例如

INSERT INTO table1 VALUES (:column1, :column2) ON DUPLICATE KEY UPDATE set column1=column1

Tags: key数据库进程on选项语句sqlite3rows
2条回答

选项1的代码看起来正确。在

如果需要筛选以绕过重复键,请在临时表中执行insert操作,然后使用SQL命令消除重复项并将其合并到目标表中。在

您可以使用如下代码将两个数据库ATTACH连接到同一个连接:

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语法。This SO question包含备选方案。在

因此,要在一个sql语句中执行大容量插入,可以使用类似

^{pr2}$

请参阅this page for information about REPLACE和其他有关冲突选项的内容。在

相关问题 更多 >