Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python curr.execute(“插入城市(名称)值(%s)”,(城市))无法将列表插入数据库_Python_Postgresql - Fatal编程技术网

Python curr.execute(“插入城市(名称)值(%s)”,(城市))无法将列表插入数据库

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("

我正试图在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("""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()
一起使用,这很有效。非常感谢你的解释。