您根本不能将占位符用于列或表名。我对此没有权威的引用-我只是从尝试过和失败中“知道”这一点。但这有一定道理:
- 如果可以对列和表进行参数化,则
execute
在提取之前准备(-ing)SQL语句的目的不多,因为可以替换语句的所有部分。 - 我不确定pysqlite 1,但MySQLdb自动引用所有字符串参数。列名和表名不应加引号。因此,如果必须决定占位符是否表示列名或表名与需要引用的值,则会使驱动程序所需的解析复杂化。
简而言之,您已经找到了正确的方法-使用字符串格式。
c.execute('SELECt {} FROM {} WHERe id=?'.format(column, table), row))1并非所有驱动程序都引用参数-
oursql不会,因为它会将SQL和参数分别发送到服务器。



