我正在尝试拉入一个创建所需表的设置文件。我是从这个开始的。
cursor.execute("CREATE TABLE IF NOT EXISTS measurement (time DATETIME)")
这是有效的。在使用参数方面,我尝试了许多不同的变体,但都得到了大致相同的错误。
table_name = scrub_table_name('measurement')
field_name = some_function1('time')
field_type = some_function2('DATETIME')
cursor.execute("CREATE TABLE IF NOT EXISTS {} (? ?)".format(table_name), (field_name, field_type))
我得到的错误是这样的。
sqlite3.OperationalError:接近"?":语法错误
如果我使用绑定版本,我也会得到相同的结果。
cursor.execute("CREATE TABLE IF NOT EXISTS {} (:fn :ft)".format(table_name), {"fn" : field_name, "ft" : field_type})
我得到这个错误。
sqlite3.OperationalError:接近":ffn":语法错误
这样我的问题就不会混淆了。显然,我确实需要将表名移动到我自己清理并插入到字符串中的位置,因为sqlite execute将不接受这部分查询的参数。因此产生了ob.format()。虽然我有兴趣在这方面出错,但我最感兴趣的是如何制作?的:fn参数工作。我在一个家庭酿造配置的Mac 10.12.6上使用Python 3.6.2和sqlite3.16.0,我并不希望这会改变它,因为我也在Debian系统上测试过同样的错误。
cursor.execute()
:的有效命令
INSERT INTO table_name VALUES (?, ?);
SELECT * FROM table_name WHERE column_name = ?;
UPDATE table_name SET col1 = ? WHERE col2 = ?;
但CREATE TABLE IF NOT EXISTS table_name (? ?)
不是,因为用文字值替换那些?
总是会产生语法无效的命令。