我有我自己的个人数据库,我为了好玩(所以不关心 sql 注入,因为它是我自己创建的私有数据库),并且正在尝试更改我创建的使用字符串格式 (.format()) 和占位符 (? 、%s 等)并使用 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'))
Run Code Online (Sandbox Code Playgroud)
该函数通过使用您想要的列中的新信息更新指定行的指定列来更新表。例如,在 3 x 3 表中,如果该列是年龄或其他内容,我可以使用该函数将第 1 行第 2 列更新为第 18 行,而不是第 1 行第 2 列。之后的选择查询只是选择更新的特定行,之后的打印语句使用 tabulate 包打印出一个整洁有序的表格。
每当我尝试使用此功能时出现的错误是:
sqlite3.OperationalError: no such column: …Run Code Online (Sandbox Code Playgroud)