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

2024-05-23 17:03:21 发布

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

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

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

错误:

^{pr2}$

我可以通过转义来避免多字错误:

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

但是对于有15+列的表,每列都要转义是一件痛苦的事。psycopg2不以更简单的方式处理这个问题吗?但它仍然会对空字符串抛出错误。在

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

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

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

Tags: 字符串name错误items数组description单词psycopg2
1条回答
网友
1楼 · 发布于 2024-05-23 17:03:21

调用execute是用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))

相关问题 更多 >