สร้างตารางใน SQLite ต่อเมื่อไม่มีอยู่แล้ว


275

ฉันต้องการสร้างตารางในฐานข้อมูล SQLite หากไม่มีอยู่แล้ว มีวิธีการทำเช่นนี้? ฉันไม่ต้องการวางตารางหากมีอยู่สร้างได้เฉพาะเมื่อไม่มี


3
ความเป็นไปได้ที่ซ้ำกันของการสร้างตาราง SQLite หากไม่มีอยู่จริง
Toby Allen

คำตอบ:


483

จากhttp://www.sqlite.org/lang_createtable.html :

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);

3
สิ่งนี้ใช้ได้กับดัชนีเช่นกัน:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper

1
แล้วถ้าฉันต้องการจะใส่เม็ดมีดก็ต่อเมื่อมันไม่มีอยู่ด้วย สิ่งที่ฉันต้องการคือการสร้างตารางที่ได้รับทันทีหากฉันพบว่ามันไม่มีอยู่โดยไม่ต้องจ่ายเงินสำหรับงบ REPLACE ทุกครั้ง
Britton Kerin

1
@BrittonKerin ดังนั้นก่อนอื่นคุณต้องตรวจสอบว่ามีตารางอยู่หรือไม่ (นี่คือกุญแจที่ฉันคิดว่า ... ส่วนที่เหลือก็แค่เรียกใช้รหัสของคุณหลังจากทำการตรวจสอบตามเงื่อนไข) ฉันเห็นคำตอบของฉันในคำตอบเกี่ยวกับเงื่อนไขนี้
aaronlhe

1

ฉันจะลองและเพิ่มคุณค่าให้กับคำถามที่ดีมากนี้และเพื่อสร้างคำถามของ @ BrittonKerin ในหนึ่งในความคิดเห็นภายใต้คำตอบที่ยอดเยี่ยมของ @David Wolever ต้องการแบ่งปันที่นี่เพราะฉันมีความท้าทายเช่นเดียวกับ @BrittonKerin และฉันได้ทำงานบางอย่าง (เช่นเพียงต้องการเรียกใช้โค้ดบางส่วนเท่านั้นหากไม่มีตาราง)

        # for completeness lets do the routine thing of connections and cursors
        conn = sqlite3.connect(db_file, timeout=1000) 

        cursor = conn.cursor() 

        # get the count of tables with the name  
        tablename = 'KABOOM' 
        cursor.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name=? ", (tablename, ))

        print(cursor.fetchone()) # this SHOULD BE in a tuple containing count(name) integer.

        # check if the db has existing table named KABOOM
        # if the count is 1, then table exists 
        if cursor.fetchone()[0] ==1 : 
            print('Table exists. I can do my custom stuff here now.... ')
            pass
        else: 
           # then table doesn't exist. 
           custRET = myCustFunc(foo,bar) # replace this with your custom logic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.