我尝试执行以下代码:
sqlcode = 'INSERT INTO ? VALUES (?,?,?,?,?,?,?,?)'
sqlparams = ('LOT', None, 'msg_number_1', 'descr_11', 'st_p_11', 'step_11', 'deposit_11', 'decr_pr_11', 'class_11')
cursor.execute(sqlcode, sqlparams)
我尝试使用None
,因为LOT table在第一列有活动的自动增量。
但是它不能处理错误消息sqlite3.OperationalError: near "?": syntax error
如果我尝试以下代码:
sqlcode = 'INSERT INTO LOT VALUES (?,?,?,?,?,?,?,?)'
sqlparams = (None, 'msg_number_1', 'descr_11', 'st_p_11', 'step_11', 'deposit_11', 'decr_pr_11', 'class_11')
cursor.execute(sqlcode, sqlparams)
它工作得很好。但是为什么呢?我看不出有什么不同
在SQL中,不能像使用值作为表名那样使用表达式。表达式将在运行时进行计算,这意味着可以根据表达式的值针对不同的表运行查询
出于同样的原因,您只允许使用
?
语法,您可以在SQL中使用表达式但是,您当然可以从Python中为SQLite提供不同表的查询,只要SQLite不必处理变量。例如:
或者,如果您从其他地方获得该元组:
但是如果您可以控制
sqlparams
,那么前面的解决方案显然更可取相关问题 更多 >
编程相关推荐