带有 pg8000 的 PostgreSQL - 将 SQL 结果插入另一个表

问题描述 投票:0回答:2

我正在尝试使用 Python 的 pg8000 驱动程序将 PostgreSQL 表中的行复制到另一个表。这是代码:

import pg8000
conn = pg8000.connect(user="postgres", password="XXXXX",database="test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM exampletable")
results = cursor.fetchall()

我现在想要的是将结果完全插入到新表中。应该是这样的:

cursor.executemany("INSERT INTO secondtable VALUES (%s)", results)

但无法以这种方式运行,我不知道如何修复它。并非所有字段都是字符串类型,也许应该以某种方式修复?

python postgresql psycopg2 pg8000
2个回答
3
投票

格式 %s 用于标量值。将结果转换为字符串,如下所示:

cursor.execute("INSERT INTO secondtable VALUES %s" % str(results))

0
投票

有点偏离主题,但搜索相关问题会指向这里。我想知道如何格式化执行 sql 字符串的绑定变量。 koriander 的答案中给出的格式不适用于 pg8000 1.10.5。这就是最终对我有用的东西:

    some_field_value = 'value'
    sql = 'SELECT a_field FROM your_table WHERE some_field = %s'
    cursor.execute(sql, [some_field_value])

文档中的详细信息:pg8000 Cursor.execute

重要一点:

args – 如果 paramstyle 是 qmark、numeric 或 format,则此参数应该是要绑定到语句中的参数数组

要记住两件事:

  1. pg8000 从不接受格式字符串周围的引号 (%s)
  2. pg8000.paramstyle 的值很重要。默认值为“格式”
© www.soinside.com 2019 - 2024. All rights reserved.