将PostgreSQL中的表从一个数据库复制到另一个数据库的Python代码

3
我正在使用Python中的psycopg2管理两个数据库。我想将db1中每个表中的数据复制到db2中。我不想使用pg_dump,因为我希望能够在第一个数据库进行更改时更新第二个数据库中的表,而如果表中已存在数据,则pg_dump将无法运行。现在,我为每个数据库有两个游标。我正在使用以下代码复制表格: result = cursor1.execute('SELECT * from "table1"') 我试图做类似于以下操作: cursor2.execute('INSERT INTO table2 result') 我还使用了pg_dump -s在第二个数据库中复制了与第一个数据库相同的模式。
我该如何使这个工作?
1个回答

3
如果您遍历结果并为每一行使用插入语句,这种方法可能会起作用,但可能不是执行此转移的正确方式(更新如@Jules所说):
for row in result.fetchall():
    cursor2.execute('INSERT INTO table2 VALUES %s',(row,))

1
只是一个小问题--在Python中,'string'%variable格式化通常已被弃用。符合dbapiv2标准的模块支持基于元组的语法:cur.execute('INSERT INTO table2 %s', (row,))(元组中的尾逗号是有意义的)。 - Jules
@Jules 谢谢你的信息。 - metmirr
@Jules 显然有一些外键与其他表相连接,这防止我直接插入到这个单表中。有没有一种方法可以插入到所有链接的表中? - Arush Shah
我收到了错误信息:“在表“BeverageMenuMap”上插入或更新数据违反了外键约束“FK_BeverageMenuMap_Beverages_BeverageId”。 - Arush Shah
@ArushShah 你需要分享该表上的外键约束。这可能更适合另一个问题或可能是聊天,尽管我建议您查阅在Postgres中使用FK约束的原则。 - Jules
这是一个快速的方法。谢谢 @metmirr - Hrushikesh Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接