Tạo bảng trong SQLite chỉ khi nó chưa tồn tại


Câu trả lời:


482

Từ http://www.sqlite.org/lang_createtable.html :

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

3
Điều này cũng hoạt động cho các chỉ số:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper

1
Sẽ thế nào nếu tôi muốn sau đó cũng chỉ thực hiện một loạt các chèn nếu nó không tồn tại? Những gì tôi muốn là tạo một bảng dẫn xuất một cách nhanh chóng nếu tôi thấy nó không tồn tại, mà không phải trả tiền cho một loạt các câu lệnh REPLACE mỗi lần.
Britton Kerin

1
@BrittonKerin, vì vậy trước tiên bạn phải kiểm tra xem bảng có tồn tại hay không (đây là khóa tôi cho rằng ... phần còn lại chỉ là chạy mã của bạn sau khi thực hiện kiểm tra có điều kiện). Đừng xem câu trả lời của tôi trong câu trả lời về điều kiện này.
aaronlhe

1

Tôi sẽ cố gắng và thêm giá trị cho câu hỏi rất hay này và xây dựng câu hỏi của @ BrittonKerin trong một trong những bình luận dưới câu trả lời tuyệt vời của @David Wolever. Muốn chia sẻ ở đây vì tôi có cùng thử thách với @BrittonKerin và tôi đã có một cái gì đó hoạt động (tức là chỉ muốn chạy một đoạn mã chỉ NẾU bảng không tồn tại).

        # 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.