Как я могу использовать имена столбцов, чтобы указать, что писать с помощью sqlite3?

#python #sql #python-3.x #sqlite #sql-insert

Вопрос:

Например, я хочу создать функцию, в которой я добавляю пользователя в свою таблицу «пользователи»:

 def add_user(name, id):
    cursor.execute("INSERT INTO users VALUES (?, ?, ?)", (name, id))
    conn.commit()
 

(Следует отметить, что столбец » имя «(не переменная) является первым столбцом, а столбец «идентификатор» является третьим столбцом)

Этот код записывает переменную ‘name’ в первый столбец, который является столбцом name, и записывает переменную ‘id’ во второй столбец (который не является столбцом id).

Есть ли способ использовать имена столбцов, чтобы указать, куда писать? Я хочу избежать использования таких решений, как запись текущего значения второго столбца в себя, или добавление к нему 0, или что-то в этом роде.

Ответ №1:

Во-первых, вы используете 3 ? заполнителя и передаете только 2 значения: name и id , поэтому ваш код даже не будет выполняться.

В INSERT инструкции вы можете указать столбцы, которые будут получать значения, которые вы предоставляете в виде кортежа:

 cursor.execute("INSERT INTO users(name, id) VALUES (?, ?)", (name, id))
 

или:

 cursor.execute("INSERT INTO users(id, name) VALUES (?, ?)", (id, name))
 

В обоих случаях результат один и тот же.

При INSERT INTO users(id, name)... этом 1 — е ? соответствует значению столбца id , а 2 ? -е соответствует значению столбца name , поэтому вы должны передавать их значения внутри кортежа в том же порядке.