在创建表中使用参数...(列默认值?)子句,在Python sqlite3db-api中
-
23-12-2019 - |
题
我想使用python执行CREATE STATEMENT子句,使用参数替换为?(这样我就可以安全地从python类型中指定默认值)。
它似乎不起作用,尽管当我在select或类似语句中使用参数化语句时,它可以正常工作。例如:
正如预期的那样:
>>> list(sqlite3.connect('sensemap.sql3').cursor().execute('select ?', (101,)))
[(101,)]
意料之外:
>>> sqlite3.connect('sensemap.sql3').cursor().execute('create table mytable (mycolumn default ?)', (101,))
Traceback (most recent call last):
File "<console>", line 1, in <module>
OperationalError: near "?": syntax error
这是为什么?我所尝试的可能吗?
解决方案
所有模式对象的原始SQL语句都存储在数据库中(尝试 SELECT sql FROM sqlite_master
).有了这样一个简单的文本值,就不可能记住参数值,所以参数是不允许在 CREATE xxx
发言。
不隶属于 StackOverflow