我正在慢慢失去理智。我一辈子都无法弄清楚为什么当我使用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查询中的?占位符将自动将引号括在字符串中,但不能在数字前后加上引号,因此您需要确保传递的参数具有正确的类型。

09-11 20:20