在Python sqlite3 db-api中使用CREATE TABLE ...(列DEFAULT?)子句中的参数

时间:2014-04-14 07:57:23

标签: python sqlite python-db-api

我想使用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

为什么?我尝试的是什么?

1 个答案:

答案 0 :(得分:1)

所有架构对象的原始SQL语句都存储在数据库中(try SELECT sql FROM sqlite_master)。 使用这样一个简单的文本值,就无法记住参数值,因此CREATE xxx语句中不允许使用参数。