2024-05-28 19:01:01 发布
网友
我有一个程序,用户可以选择他们想在SQLite中修改的表。我将所选内容存储在一个名为table的变量中,然后尝试从该表中选择所有内容
table
c.execute('SELECT * FROM ?', (table,))
这个程序陷入了问号。上面写着:
"Sqlite3.OperationalError: near "?": syntax error"
我做错什么了?
不能用参数替换表名。您需要自己将表名添加到查询字符串中。像这样的:
query = 'SELECT * FROM {}'.format(table) c.execute(query)
需要注意的一点是表名的值的来源。如果来自不受信任的源(例如用户),则需要验证表名以避免潜在的SQL注入攻击。一种方法可能是构造一个参数化查询,从数据库目录中查找表名:
import sqlite3 def exists_table(db, name): query = "SELECT 1 FROM sqlite_master WHERE type='table' and name = ?" return db.execute(query, (name,)).fetchone() is not None
不能用参数替换表名。您需要自己将表名添加到查询字符串中。像这样的:
需要注意的一点是表名的值的来源。如果来自不受信任的源(例如用户),则需要验证表名以避免潜在的SQL注入攻击。一种方法可能是构造一个参数化查询,从数据库目录中查找表名:
相关问题 更多 >
编程相关推荐