簡體   English   中英

使用Python sqlite3在數據庫中創建表的SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM