如何为SQLite表nam使用变量

2024-05-28 19:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,用户可以选择他们想在SQLite中修改的表。我将所选内容存储在一个名为table的变量中,然后尝试从该表中选择所有内容

c.execute('SELECT * FROM ?', (table,))

这个程序陷入了问号。上面写着:

"Sqlite3.OperationalError: near "?": syntax error"

我做错什么了?


Tags: 用户from程序内容executesqlitetableerror
1条回答
网友
1楼 · 发布于 2024-05-28 19:01:01

不能用参数替换表名。您需要自己将表名添加到查询字符串中。像这样的:

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

相关问题 更多 >

    热门问题