Postgresql和Python-TypeError:在字符串格式化期间并非所有参数都已转换
我使用Python Flask和Postgres将一个苹果插入数据库:Postgresql和Python-TypeError:在字符串格式化期间并非所有参数都已转换,python,postgresql,flask,flask-sqlalchemy,Python,Postgresql,Flask,Flask Sqlalchemy,我使用Python Flask和Postgres将一个苹果插入数据库: cursor.execute(""" LOCK TABLE apples IN SHARE ROW EXCLUSIVE MODE; INSERT INTO apples(apple) SELECT %s WHERE NOT EXISTS ( SELECT * FROM apples WHERE apple = %s
cursor.execute("""
LOCK TABLE apples IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO apples(apple)
SELECT %s
WHERE NOT EXISTS (
SELECT * FROM apples WHERE apple = %s
);
""",
apple))
但我得到了以下错误:
TypeError:在字符串格式化过程中并非所有参数都已转换
错在哪里
编辑:
使用(apple,)
我得到以下错误:索引器错误:元组索引超出范围(同样使用[apple]
)
谢谢将
苹果
放入一个iterable,即列表或元组中:
cursor.execute("""
LOCK TABLE apples IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO apples(apple)
SELECT %s
WHERE NOT EXISTS (
SELECT * FROM apples WHERE apple = %s
);
""",
(apple,)))
您只格式化了一个字符串,但有两个。另外,我非常确定Python的游标对象不允许有多个语句。您需要将锁表拆分。我已删除了锁表语句,但错误仍然存在。感谢y的提示响应,但现在我收到以下错误:
索引器:元组索引超出范围(也与[apple]
)。您的SQL代码中有两个%s
,因此,您需要在元组或参数列表中转换相同数量的参数。在您的情况下,它们似乎都是apple
,因此看起来像(apple,apple)或[apple,apple]。