我重构了一点点side project使用SQLite而不是Python数据结构,以便我可以学习SQLite。我一直使用的数据结构是一个字典列表,其中每个字典的键代表一个菜单项的属性。最终,这些键应该成为SQLite表中的列。SQLite:为什么不能使用参数来设置标识符?
我首先想到的是我可能会创建一个单列表,遍历字典的键列表,以及执行ALTER TABLE
,ADD COLUMN
命令,像这样以编程方式创建表:
# Various import statements and initializations
conn = sqlite3.connect(database_filename)
cursor = conn.cursor()
cursor.execute("CREATE TABLE menu_items (item_id text)")
# Here's the problem:
cursor.executemany("ALTER TABLE menu_items ADD COLUMN ? ?", [(key, type(value)) for key, value in menu_data[0].iteritems()])
再过了些阅读,我意识到参数不能用于标识符,只能用于字面值。该PyMOTW on sqlite3
说
查询参数可使用选择,插入,并更新语句。它们可以出现在字面值合法的查询的任何部分。
Kreibich在p。的使用SQLite(ISBN 9780596521189)135:然而
注意的是,参数只能用于替换文字 值,如引用的字符串或数值。参数 不能用于代替标识符,如表名称或 列名称。 SQL的下列位是无效的:
SELECT * FROM ?; -- INCORRECT: Cannot use a parameter as an identifier
我接受位置或命名参数不能以这种方式使用。他们为什么不能呢?是否有一些我缺少的一般原则?
相似,所以问题:
您可能会发现的https:/感兴趣的/www.sqlite.org/optoverview.html,并考虑如何更改列名影响是否可以使用索引,从而影响编译的字节码的性质。 – Duncan