gpt4 book ai didi

python - curr.execute ("""INSERT INTO CITY (name) values (%s) ;""",(cities)) 无法将列表插入数据库

转载 作者:行者123 更新时间:2023-11-29 14:04:44 28 4
gpt4 key购买 nike

我正在尝试将列表插入到 postgres 表中。

在 try 中,它在这一行失败了:

curr.execute("""INSERT INTO CITY (name) values (%s);""",(cities))

我尝试了很多变体,包括只使用字符串或括号,但没有任何效果。我也尝试过 executemany,但也没有用。

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

除了: print("无法插入")

编辑:

我使用 execute 或 executemany 得到“并非所有参数都在字符串格式化期间转换”。

我使用

创建了一个较小的城市列表

城市 = ['旧金山', '圣何塞']

但实际列表中有 100 个城市。

如果我用

curr.executemany("INSERT INTO CITY (name) values (%s);","San Francisco",)

然后SAnETC被插入到数据库中,即每一行都有一个字母。

最佳答案

问题是,您应该将查询参数保存在一个元组中:

city = "San Francisco"
curr.execute("""INSERT INTO CITY (name) values (%s);""", (city, ))

注意 city 后面的逗号。


如果是executemany(),您应该有一个元组列表:

params = [("San Francisco", )]
curr.executemany("INSERT INTO CITY (name) values (%s);", params)

或者字典列表,如果你使用了命名参数:

params = [
{"city": "San Francisco"}
]
curr.executemany("INSERT INTO CITY (name) values (%(city)s);", params)

如果你想让你的cities列表适应executemany(),你可以使用:

params = [[city] for city in cities]
curr.executemany("INSERT INTO CITY (name) values (%s);", params)

注意:实际上,当我说“元组”时,我并不是 100% 正确 - iterables 可能是一个更好的词 - 只是查询参数通常使用元组。为了简单起见,我将保留答案。

关于python - curr.execute ("""INSERT INTO CITY (name) values (%s) ;""",(cities)) 无法将列表插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390242/

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