[英]SQL for creating tables in a database using Python sqlite3
我試圖創建多個具有不同名稱的表(當然),但是共享相同的架構。 為此,我在Cursor
對象上使用executemany
,如下所示:
tables = ['Meanings', 'Synonyms', 'Antonyms', 'Examples', 'Phrases',
'Pronunciations', 'Hyphenations']
create_table_query = '''CREATE TABLE (?) (
id INTEGER NOT NULL,
text TEXT,
word_id INTEGER NOT NULL,
PRIMARY KEY id,
FOREIGN KEY(word_id) REFERENCES Word(id)
)'''
cursor.executemany(create_table_query, tables)
執行此代碼段時,出現以下錯誤消息:
OperationalError: near "(": syntax error
由於我發現錯誤消息的描述性不足,因此無法通過SQL修復此錯誤。 我已經嘗試了以下查詢,但無法了解其成功和查詢失敗的信息:
create_table_query_1 = '''CREATE TABLE {} (
id INTEGER NOT NULL,
text TEXT,
word_id INTEGER NOT NULL,
PRIMARY KEY id,
FOREIGN KEY(word_id) REFERENCES Word(id)
)''' # Syntax error near "id"
create_table_query_2 = '''CREATE TABLE (?) (
id INTEGER PRIMARY KEY,
text TEXT,
word_id INTEGER NOT NULL,
FOREIGN KEY(word_id) REFERENCES Word(id)
)''' # Syntax error near "("
create_table_query_1 = '''CREATE TABLE {} (
id INTEGER PRIMARY KEY,
text TEXT,
word_id INTEGER NOT NULL,
FOREIGN KEY(word_id) REFERENCES Word(id)
)''' # works with string formatting
此外,還有什么其他有效的(就時間而言)實現相同目標的方法呢?
要將我的評論添加到答案中並對其進行擴展:您不能參數化表或列名。 我找不到與此有關的任何文檔...
在其他兩個示例中,您還有SQLite不需要的多余的括號/括號。
因此,您發現的解決方案是像在最后一個示例中那樣,對表名使用字符串替換。
這是一個循環遍歷所有表的示例:
for table in tables:
cursor.execute('''CREATE TABLE {} (
id INTEGER PRIMARY KEY,
text TEXT,
word_id INTEGER NOT NULL,
FOREIGN KEY(word_id) REFERENCES Word(id)
)'''.format(table))
但是,我不清楚您為什么要針對不同類型的單詞使用不同的表,因為這似乎與數據庫設計原則背道而馳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.