gpt4 book ai didi

python - 使用 python 更新语句不适用于 sqlite3

转载 作者:行者123 更新时间:2023-12-01 09:01:50 25 4
gpt4 key购买 nike

我正在慢慢失去理智。我一生都无法弄清楚为什么当我使用来自 input() 的字符串时我无法让这个更新语句工作。第一部分工作正常:

table_name = 'ARCHIVE_BOXES'
column_name = 'status'
id_column = 'id'

c.execute("UPDATE {tn} SET {cn}=('reading') WHERE {idf}=(566)".
format(tn=table_name, cn=column_name, idf=id_column))

conn.commit()

但这并没有,我已经用头撞墙两天了:

table_name = 'ARCHIVE_BOXES'
column_name = 'status'
id_column = 'id'
pk = ''
while not pk:
pk = input()
pk = ("(" + pk + ")")
primary_key = pk

ns = ''
while not ns:
ns = input()
new_status = ("\'" + ns + "\'")
new_status = ("(" + new_status + ")")

print("new_status: " + new_status)

c.execute("""
UPDATE
{tn}
SET
{cn} = ?
WHERE
{idf} = ?""".
format(tn=table_name, cn=column_name, idf=id_column),
(new_status, primary_key))

conn.commit()

我也尝试过以这种方式执行更新语句,得到相同的结果:

c.execute("UPDATE {tn} SET {cn}={ns} WHERE {idf}={idn}".
format(tn=table_name, cn=column_name2, idf=id_column,
ns=new_status, idn=primary_key))

很像this question ,它不会抛出错误 - 只是完全忽略它。

最佳答案

您的主键可能是一个整数,但在主代码(而不是代码片段)中,您向它传递一个带有括号作为字符串一部分的字符串。因此,在主代码中,查询将包含 WHERE id_column='(566)' 并且不会匹配任何记录。

尝试:

while not pk:
pk = input()
primary_key = int(pk)

看看是否效果更好。

SQL 查询中的 ? 占位符会自动在字符串周围添加引号,但不会在数字周围添加引号,因此您需要确保传递的参数具有正确的类型。

关于python - 使用 python 更新语句不适用于 sqlite3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52403943/

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