Что будет заполнителем для автоматически увеличиваемого идентификатора python3 таблицы sqlite при вставке данных после создания таблицы? - PullRequest
1 голос
/ 01 августа 2020

Я создал таблицу python3 sqlite, если она не существует, с помощью метода createTable (). Скажем, после этого я хочу вставить данные с помощью следующего метода (insertVaribleIntoTable ()).

Теперь для этого метода я не знаю идентификатор новой строки, после чего я вставлю данные, так как это автоматически приращение.

Итак, я не передал идентификатор методу insertVaribleIntoTable (). Что мне делать с переменной id? Может ли кто-нибудь любезно сказать мне, что я должен передать в качестве заполнителя идентификатора методу insertVaribleIntoTable (), потому что он будет автоматически увеличиваться при вставке данных? Кто-нибудь может сказать мне, что делать? Вы видите, что на один меньше "?" после ключевого слова "VALUES" в методе insertVaribleIntoTable (). Спасибо.

    def createTable(id, name, company, address, postal, country, home, business, mobile, fax, notes):
            
        try:
            sqliteConnection = sqlite3.connect('SQLite_Python.db');
            cursor = sqliteConnection.cursor();
            print("Connected to SQLite");
    
            sqlite_insert_with_param = """CREATE TABLE IF NOT EXISTS 'SqliteDb_Addresser' (id INTEGER PRIMARY KEY AUTOINCREMENT, name, company, address, postal, country, home, business, mobile, fax, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);""";
    
            data_tuple = (id, name, company, address, postal, country, home, business, mobile, fax, notes);
            cursor.execute(sqlite_insert_with_param, data_tuple);
            sqliteConnection.commit();
            print("Python Variables inserted successfully into SqliteDb_developers table");
    
            cursor.close();
    
        except sqlite3.Error as error:
            print("Failed to insert Python variable into sqlite table", error);
        finally:
            if (sqliteConnection):
                sqliteConnection.close();
                print("The SQLite connection is closed");  
    
    def insertVaribleIntoTable(name, company, address, postal, country, home, business, mobile, fax, notes):
            
        try:
            sqliteConnection = sqlite3.connect('SQLite_Python.db');
            cursor = sqliteConnection.cursor();
            print("Connected to SQLite");
    
            sqlite_insert_with_param = """INSERT INTO 'SqliteDb_Addresser'
                            (name, company, address, postal, country, home, business, mobile, fax, notes) 
                            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);""";
    
            data_tuple = (name, company, address, postal, country, home, business, mobile, fax, notes);
            cursor.execute(sqlite_insert_with_param, data_tuple);
            sqliteConnection.commit();
            print("Python Variables inserted successfully into SqliteDb_developers table");
    
            cursor.close();
    
        except sqlite3.Error as error:
            print("Failed to insert Python variable into sqlite table", error);
        finally:
            if (sqliteConnection):
                sqliteConnection.close();
                print("The SQLite connection is closed");

1 Ответ

1 голос
/ 01 августа 2020

Если столбец автоматически увеличивается, вы не вставляете этот столбец. Он будет создан базой данных.

Если вы хотите увидеть последний вставленный идентификатор, вы можете использовать last_insert_rowid ()

CREATE TABLE Person (
     ID integer primary key AUTOINCREMENT, 
     Name varchar(20), 
     Age Integer 
)

INSERT INTO Person (Name, Age) VALUES ('Tim', 12);  -- Don't include ID

SELECT last_insert_rowid()    -- 1

Та же идея применяется при вставке через код.

...