Python 为什么会出现错误“sqlite3.OperationalError:near”?“:语法错误”?

Python 为什么会出现错误“sqlite3.OperationalError:near”?“:语法错误”?,python,sqlite,Python,Sqlite,我很难进行非常简单的sqlite3查询。下面的代码 p = ('user',) cursor.execute("SELECT Guid FROM ? LIMIT 1",p) 给出了错误 Traceback (most recent call last): File "try_Units.py", line 21, in <module> cursor.execute("SELECT Guid FROM ? LIMIT 1",p) sqlite3.OperationalE

我很难进行非常简单的sqlite3查询。下面的代码

p = ('user',)
cursor.execute("SELECT Guid FROM ? LIMIT 1",p)
给出了错误

Traceback (most recent call last):
  File "try_Units.py", line 21, in <module>
    cursor.execute("SELECT Guid FROM ? LIMIT 1",p)
sqlite3.OperationalError: near "?": syntax error
但我使用的是示例中解释的确切语法。那么,python 3.4.0的这种语法有什么错呢


我想从名为“user”的表中访问属性“Guid”。

不能对表或列等对象名称使用SQL参数。毕竟,参数的全部目的是防止值被解释为SQL对象或命令

在此处使用字符串格式,但如果输入来自用户,请检查输入,以防止SQL注入:

p = 'user'
cursor.execute("SELECT Guid FROM {} LIMIT 1".format(p))

不能对对象名称(如表或列)使用SQL参数。毕竟,参数的全部目的是防止值被解释为SQL对象或命令

在此处使用字符串格式,但如果输入来自用户,请检查输入,以防止SQL注入:

p = 'user'
cursor.execute("SELECT Guid FROM {} LIMIT 1".format(p))

我读了那个答案,但我不明白答案。如果你不能使用问号,那么引入带问号的语法有什么意义?@Alex:你可以用它来表示值。表名不是一个值。@Alex:With?您正在尝试从“用户”限制1生成查询选择Guid,但无法从SQL字符串中选择;'user'是字符串,而不是名为user的表。@Alex:否,Guid是列名。从name='foobar'将使用'foobar'作为值的用户中选择Guid,该值可以存储在数据库列中。因此,请从用户名=?SQL参数的有效用法。值来自用户输入,通常在where子句中使用,如下面的SELECT*from MY_TABLE,其中某些_列=?。我阅读了该答案,但不理解答案。如果你不能使用问号,那么引入带问号的语法有什么意义?@Alex:你可以用它来表示值。表名不是一个值。@Alex:With?您正在尝试从“用户”限制1生成查询选择Guid,但无法从SQL字符串中选择;'user'是字符串,而不是名为user的表。@Alex:否,Guid是列名。从name='foobar'将使用'foobar'作为值的用户中选择Guid,该值可以存储在数据库列中。因此,请从用户名=?SQL参数的有效使用。值来自用户输入,通常在where子句中使用,像这样,从MY_表中选择*,其中某个_列=?。如果您的架构规范化良好,并且没有编写ORM或类似的东西,则不必使用dynamic FROM子句。如果您的架构规范化良好,并且没有编写ORM或类似的东西,则不必使用dynamic FROM子句。