Python curr.execute(“插入城市(名称)值(%s)”,(城市))无法将列表插入数据库
我正试图在postgres表中插入一个列表 在try内部,它在以下行失败:Python curr.execute(“插入城市(名称)值(%s)”,(城市))无法将列表插入数据库,python,postgresql,Python,Postgresql,我正试图在postgres表中插入一个列表 在try内部,它在以下行失败: curr.execute("""INSERT INTO CITY (name) values (%s);""",(cities)) 我尝试过很多变体,包括只使用字符串或括号,但都不起作用。我也试过ExecuteMy,但也不起作用 try: conn = psycopg2.connect("dbname=testapp user=postgres") curr = conn.cursor() curr.execute("
curr.execute("""INSERT INTO CITY (name) values (%s);""",(cities))
我尝试过很多变体,包括只使用字符串或括号,但都不起作用。我也试过ExecuteMy,但也不起作用
try:
conn = psycopg2.connect("dbname=testapp user=postgres")
curr = conn.cursor()
curr.execute("""INSERT INTO CITY (name) values (%s);""",(cities))
conn.commit()
curr.close()
conn.close()
除:
打印(“无法插入”)
编辑:
我用execute或executemany获得“字符串格式化期间并非所有参数都转换”
我使用创建了一个较小的城市列表
城市=['圣弗朗西科','圣何塞']
但实际名单上有100个城市
如果我使用
curr.executemany("INSERT INTO CITY (name) values (%s);","San Francisco",)
然后S
A.
N
等
插入数据库中,即每行有一个字母。为什么使用“
,将其更改为”
和打印异常获取更多详细信息:
try:
conn = psycopg2.connect("dbname=testapp user=postgres")
curr = conn.cursor()
curr.execute("INSERT INTO CITY (name) VALUES (%s)", (cities))
conn.commit()
curr.close()
conn.close()
except Exception as ex:
print(ex) # print exception detail
更新
您应该使用大容量插入,如:
INSERT INTO CITY (name) VALUES (%s),(%s),(%s)
为什么要使用”
,将其更改为“
和打印异常获取更多详细信息:
try:
conn = psycopg2.connect("dbname=testapp user=postgres")
curr = conn.cursor()
curr.execute("INSERT INTO CITY (name) VALUES (%s)", (cities))
conn.commit()
curr.close()
conn.close()
except Exception as ex:
print(ex) # print exception detail
更新
您应该使用大容量插入,如:
INSERT INTO CITY (name) VALUES (%s),(%s),(%s)
问题是,您应该将查询参数保留在元组中:
注意城市
后面的逗号
对于
executemany()
,您应该有一个元组列表:
或字典列表,如果您要使用命名参数:
如果要将
城市
列表调整为executemany()
,可以使用:
params = [[city] for city in cities]
curr.executemany("INSERT INTO CITY (name) values (%s);", params)
注意:事实上,当我说“tuples”时,我并不是100%正确-iterables可能是一个更好的词-只是tuples通常用于查询参数。为了简单起见,我将保留答案。问题是,您应该将查询参数保留在元组中: 注意
城市
后面的逗号
对于
executemany()
,您应该有一个元组列表:
或字典列表,如果您要使用命名参数:
如果要将
城市
列表调整为executemany()
,可以使用:
params = [[city] for city in cities]
curr.executemany("INSERT INTO CITY (name) values (%s);", params)
注意:事实上,当我说“tuples”时,我并不是100%正确-iterables可能是一个更好的词-只是tuples通常用于查询参数。为了简单起见,我将保留答案。
executemany
需要列表或元组列表
cities = [['San Francsico'],['San Jose']]
curr.executemany("INSERT INTO CITY (name) values (%s);",cities)
executemany
需要列表或元组列表
cities = [['San Francsico'],['San Jose']]
curr.executemany("INSERT INTO CITY (name) values (%s);",cities)
你能展示一下城市的内容吗?好奇的是,你能展示一下你的
executemany
尝试吗?相同的异常?删除try/except-它实际上是如何失败的?发布追踪。你能显示城市的内容吗?好奇的是,你能展示一下你的executemany
尝试吗?相同的异常?删除try/except-它实际上是如何失败的?根据我在网上看到的东西,我尝试了单引号和三引号。我改为您提到的异常,我不明白引用更改如何帮助解决问题(除了改进的异常处理,但由于这是一个诊断步骤,而不是修复,因此更适合于注释).我认为答案是有帮助的,因为现在我知道问题是什么,以前我不知道。我同意答案是有帮助的。我不同意这是一个答案。并非所有有用的东西都是答案。我以前看到过批量更新,但我有100个城市,所以我尝试插入城市(名称)值(%s),(%s),(%s),c代表城市中的c)并得到语法错误:生成器表达式必须加括号,如果不是唯一的参数,我尝试了基于我在网上看到的内容的单引号和三引号。我改为您提到的异常,我不明白引用更改如何帮助解决问题(除了改进的异常处理,但由于这是一个诊断步骤,而不是修复,因此更适合于注释).我认为答案是有帮助的,因为现在我知道问题是什么,以前我不知道。我同意答案是有帮助的。我不同意这是一个答案。并不是所有有用的东西都是答案。我以前看到过批量更新,但我有100个城市,所以我尝试插入城市(名称)值(%s),(%s),(%s),c代表城市中的c),并得到了语法错误:生成器表达式必须加括号,如果不是唯一的参数,当我尝试插入时,所有城市都在一行9 |{“旧金山”,“纽约”,华盛顿,米兰,DC}但是使用instead executemany会给出“在字符串格式化过程中并非所有参数都被转换”@请查看更新的答案。我已经包含了一个部分,您可以将城市
与executemany()一起使用
。这很有效。非常感谢您的解释。当我尝试插入时,它确实执行了插入操作,但现在所有城市都在一行9 |{“旧金山”、“纽约”、华盛顿、米兰、DC}。但是使用instead executemany会给出“在字符串格式化过程中并非所有参数都被转换”“@just好奇请查看更新的答案。我已经包括了一个部分,您可以将cities
调整为与executemany()
一起使用,这很有效。非常感谢你的解释。