gpt4 book ai didi

python - 使用 psycopg2 插入多词字符串和空数组

转载 作者:行者123 更新时间:2023-11-29 13:29:18 25 4
gpt4 key购买 nike

psycopg2 在插入多个单词、空字符串和空数组时会报错:

name = "Meal Rounds"
description = ""
sizes = []
cur.execute(""" INSERT INTO items (name, description, sizes) VALUES (%s, %s, %s)""" % (name, description, sizes))

错误:

# Multi word error
psycopg2.ProgrammingError: syntax error at or near "Rounds"
LINE 1: ... (name, description, sizes) VALUES (Meal Rounds, , ...
^
# Empty string error
psycopg2.ProgrammingError: syntax error at or near ","
LINE 1: ...scription, sizes) VALUES ("Meal Rounds", , [], Fals...
^
# Empty array error
psycopg2.ProgrammingError: syntax error at or near "["
LINE 1: ...n, sizes) VALUES ("Meal Rounds", "None", [], False)...
^

我可以通过转义来绕过多词错误:

""" INSERT INTO items (name, description, sizes) VALUES (\"%s\", \"%s\", %s)"""

但是对于超过 15 列的表格,转义每一列是一件很痛苦的事情。 psycopg2 不会以更简单的方式处理这个问题吗?尽管如此,它仍然会为空字符串抛出错误。

如何更有效地插入多个单词,以及如何插入空字符串和数组?

这是 psql 在我的专栏上打印的内容:

 name          | character varying(255)   | 
description | character varying(255) |
sizes | integer[] |

最佳答案

您的执行调用正在创建一个带有 Python 字符串替换的字符串,结果证明这是无效的 SQL。您应该使用 Python DB API 提供的参数替换:

https://www.python.org/dev/peps/pep-0249/#id15

要使用参数替换调用 execute,您需要向它传递两个参数。第一个是带有依赖于数据库的参数字符串的查询。 Psycopg2 使用“pyformat”paramstyle,因此您的查询将按书面方式工作。第二个参数应该是您要替换到查询中的变量。数据库驱动程序将处理您需要的所有引用/转义。所以你的执行电话应该是

cur.execute("""INSERT INTO items (name, description, sizes) VALUES (%s, %s, %s)""", (name, description, sizes))

关于python - 使用 psycopg2 插入多词字符串和空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27478156/

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