我重構了一點點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