gpt4 book ai didi

python - 将 python 列表插入 Postgres 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:50 27 4
gpt4 key购买 nike

我在使用 psycopg 格式化插入列表时遇到问题。这是我正在尝试做的代码示例。基本上我只是从一个表中读取数据并尝试将其插入到另一个表中。

代码:

cur.execute("""select data from \"Table1\" where lat=-20.004189 and lon=-63.848004""")
rows = cur.fetchall()
print rows
cur.execute("""INSERT INTO \"%s\" (data) VALUES (ARRAY%s)""" % (args.tableName,rows)))

第一次select查询返回的结果是这样的:

[([6193, 3975, 4960, 5286, 3380, 970, 3328, 3173, 2897, 2457, 2443, 2674, 2172, 2740, 3738, 4907, 3691, 4234, 3651, 3215],)]

当我尝试将其插入另一个表时,出现以下格式错误。

   cur.execute(cur.mogrify("""INSERT INTO \"%s\" (data) VALUES (%s)""" % (args.tableName,rows)))
psycopg2.ProgrammingError: syntax error at or near "["
LINE 1: INSERT INTO "DUMMY1km" (data) VALUES ([([6193, 3975, 4960, 5...

我尝试了 cur.mogrify,但它似乎没有帮助。

如果有人可以解决此问题,请告诉我。

谢谢阿迪

最佳答案

我认为这里不需要mogrify。使用 executemany 并将 rows 作为第二个参数传递。

cur.executemany(
"""INSERT INTO "%s" (data) VALUES (%%s)""" % (args.tableName),rows)

使用参数化参数有助于防止 SQL injection .

表名不能参数化,所以我们必须使用字符串插值将表名放在SQL查询中。 %%s 转义百分号,在字符串插值后变为 %s


顺便说一下,(如 a_horse_with_no_name has already pointed out )你可以使用 INSERT INTO ... SELECT form INSERT 将两个 SQL 查询作为一个执行:

cur.execute(
"""INSERT INTO %s (data)
SELECT data FROM Table1
WHERE lat=-20.004189 AND lon=-63.848004""" % (args.tableName))

根据评论中的问题,如果有多个字段,则SQL变为:

cur.executemany(
"""INSERT INTO {t} (lat,lon,data1,data2)
VALUES (%s,%s,%s,%s)""".format(t=args.tableName),rows)

(如果您使用format 方法,那么您不必转义所有其他%s。)

关于python - 将 python 列表插入 Postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com