我有自己的个人数据库,这是为了好玩(所以我不把SQL注入作为我自己的私人数据库),我正在尝试更改我创建的使用字符串格式(.format())和占位符(?,然后使用f字符串。我遇到了一个问题,在我将sqlite3查询更改为f字符串后,将指定列更新为指定行的函数之一将无法运行。
这是我当前使用F字符串的函数:
import sqlite3
from tabulate import tabulate
conn = sqlite3.connect("Table.db")
c = conn.cursor()
def updatedb(Column, Info, IdNum):
with conn:
data = c.execute(f"UPDATE Table_name SET {Column} = {Info} WHERE IdNum={IdNum}")
c.execute(f"SELECT * FROM Table_name WHERE IdNum = {IdNum}")
print(tabulate(data, headers="keys", tablefmt="grid", stralign='center', numalign='center'))
函数通过更新指定行的指定列以及该列中所需的新信息来更新表。例如,在一个3x 3表中,如果第1行第2列是17行,我可以使用函数将第1行第2列更新为18行(如果该列是年龄或其他值)。之后的select查询只是选择更新后的特定行,之后的print语句使用制表包打印出整洁有序的表。
每当我尝试使用此函数时,得到的错误是:
sqlite3.OperationalError: no such column: Info
无论我在函数中输入什么信息变量,都会导致错误,但我无法解决问题。
这是我在尝试更改为f字符串之前所使用的更新语句,它对我很有用:
data = c.execute("UPDATE Table_name SET {} = ? WHERE IdNum=?".format(Column), (Info, IdNum))
将上面的查询更改为F字符串似乎不是那么大的变化,但它不起作用,因此任何反馈都会受到赞赏。