SQLite Python: Updating Data
Summary: in this tutorial, we will show you how to update data in the SQLite database from a Python program using the sqlite3 module.
To update data in a table from a Python program, you follow these steps:
- First, create a database connection to the SQLite database using the connect() function. Once the database connection created, you can access the database using the Connection object.
- Second, create a Cursor object by calling the cursor() method of the Connection object.
- Third, execute the UPDATE statement by calling the execute() method of the Cursor object.
In this example we will update the priority, begin date, and end date of a specific task in the tasks table.
To create a database connection, you use the following create_connection() function:
def create_connection(db_file): """ create a database connection to the SQLite database specified by the db_file :param db_file: database file :return: Connection object or None """ conn = None try: conn = sqlite3.connect(db_file) except Error as e: print(e) return conn
Code language: SQL (Structured Query Language) (sql)
This update_task() function update a specific task:
def update_task(conn, task): """ update priority, begin_date, and end date of a task :param conn: :param task: :return: project id """ sql = ''' UPDATE tasks SET priority = ? , begin_date = ? , end_date = ? WHERE cur = conn.cursor() cur.execute(sql, task) conn.commit()
Code language: Python (python)
The following main() function creates a connection to the database located in C:\sqlite\db\pythonsqlite.db folder and call the update_task() function to update a task with id 2:
def main(): database = r"C:\sqlite\db\pythonsqlite.db" # create a database connection conn = create_connection(database) with conn: update_task(conn, (2, '2015-01-04', '2015-01-06', 2)) if __name__ == '__main__': main()
Code language: Python (python)
import sqlite3 from sqlite3 import Error def create_connection(db_file): """ create a database connection to the SQLite database specified by the db_file :param db_file: database file :return: Connection object or None """ conn = None try: conn = sqlite3.connect(db_file) except Error as e: print(e) return conn def update_task(conn, task): """ update priority, begin_date, and end date of a task :param conn: :param task: :return: project id """ sql = ''' UPDATE tasks SET priority = ? , begin_date = ? , end_date = ? WHERE cur = conn.cursor() cur.execute(sql, task) conn.commit() def main(): database = r"C:\sqlite\db\pythonsqlite.db" # create a database connection conn = create_connection(database) with conn: update_task(conn, (2, '2015-01-04', '2015-01-06', 2)) if __name__ == '__main__': main()
Code language: Python (python)
After executing the program, you can connect to the database via sqlite3 command shell:
Use these command to format the output:
sqlite> .header on sqlite> .mode column
Code language: CSS (css)
And use the following statement to get the task with id 2:
SELECT * FROM tasks WHERE id = 2;
Code language: SQL (Structured Query Language) (sql)
As shown clearly from the screenshot, the task with id 2 has been updated successfully.
In this tutorial, you have learned how to update data in a table from a Python program.
Обновление данных в SQLite-таблице
Этот материал посвящен использованию запроса UPDATE для обновления SQLite-таблицы из приложения, написанного на Python. Вы узнаете, как использовать встроенный модуль sqlite3 для обновления SQLite-таблицы.
В этой статье мы рассмотрим:
- Обновление одной или нескольких колонок.
- Использование запроса с параметрами для передачи значения во время работы программы при запросе Update.
- Коммит и откат операции обновления.
- Обновление колонки с помощью значений date-time и timestamp.
- Выполнение массового обновления в одном запросе.
Подготовка
Перед выполнением следующих операций обновления таблицы SQLite нужно убедиться, что вам известно ее название, а также названия колонок.
В этом примере будет использоваться таблица sqlitedb_developers . Она была создана в первой части руководства по sqlite3 и заполнена во второй.
Обновления одной записи в таблице SQLite
Сейчас таблица sqlitedb_developers содержит шесть строк, поэтому обновим зарплату разработчика с id 4. Для выполнения запроса UPDATE из Python нужно выполнить следующие шаги:
- Сперва нужно установить SQLite-соединение из Python.
- Дальше необходимо создать объект cursor с помощью объекта соединения.
- После этого – создать запрос UPDATE. Для этого нужно знать названия таблицы и колонки, которую потребуется обновить.
- Дальше запрос выполняется с помощью cursor.execute() .
- После успешного завершения запроса нужно не забыть закоммитить изменения в базу данных.
- Соединение с базой данных закрывается.
- Также важно не забыть перехватывать все исключения SQLite.
- Наконец, нужно убедиться, что операция прошло успешно, получив данные из таблицы.
import sqlite3
def update_sqlite_table():
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sql_update_query = """Update sqlitedb_developers set salary = 10000 where /> cursor.execute(sql_update_query)
sqlite_connection.commit()
print("Запись успешно обновлена")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
update_sqlite_table()Вывод: таблица sqlitedb_developers после обновления строки из Python.
Подключен к SQLite Запись успешно обновлена Соединение с SQLite закрыто
Проверить результат можно, посмотрев данные из таблицы.
Разбор примера в подробностях
- Эта строка импортирует модуль sqlite3 в программу.
- С помощью классов и методов из модуля можно взаимодействовать с базой данных.
sqlite3.connect() и connection.cursor() :
- С помощью sqlite3.connect() устанавливается соединение с базой данных SQLite из Python.
- Дальше метод connection.cursor() используется для получения объекта сursor из объекта соединения.
После этого создается запрос UPDATE для обновления строки в таблицы. В нем указываются название колонки и новое значение. В таблице пять колонок, но код обновляет только одну из них – ту, что содержит данные о зарплате.
- Операция, сохраненная в запросе UPDATE, выполняется с помощью метода execute() объекта сursor .
- connection.commit() применяется для сохранения в базе данных.
Наконец, закрываются объекты сursor и соединение в блоке finally после завершения операции обновления.
Примечание: если выполняется операция массового обновления и есть необходимость откатить изменения в случае ошибки хотя бы при одном, нужно использовать функцию rollback() класса connection . Ее необходимо применить в блоке except .
Использование переменных Python в запросе UPDATE
Большую часть времени обновление таблицы нужно выполнять с помощью значений, получаемых при работе программы. Например, когда пользователи обновляют свой профиль через графический интерфейс, нужно обновить заданные ими значения в соответствующей таблице.
В таком случае рекомендуется использовать запрос с параметрами. Такие запросы используют заполнители ( ? ) прямо внутри инструкций SQL. Это помогает обновлять значения с помощью переменных, а также предотвращать SQL-инъекции.
import sqlite3
def update_sqlite_table(dev_id, salary):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sql_update_query = """Update sqlitedb_developers set salary = ? where /> data = (salary, dev_id)
cursor.execute(sql_update_query, data)
sqlite_connection.commit()
print("Запись успешно обновлена")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
update_sqlite_table(3, 7500)Вывод: таблица sqlitedb_deveopers после обновления с помощью переменной Python и запроса с параметрами.
Подключен к SQLite Запись успешно обновлена Соединение с SQLite закрыто
Подтвердить операцию можно, получив данные из SQLite-таблицы из Python.
- Запрос с параметрами был использован для того, чтобы получить значения при работе программы и установить их на места заполнителей. В этом случае один из них отвечает за колонку «salary», а второй – колонку id .
- После этого готовится кортеж с данными из двух переменных Python в определенном порядке. Этот кортеж вместе с запросом передается в метод cursor.execute() . Важно помнить, что в данном случае порядок переменных в кортеже играет значение.
- В конце изменения закрепляются с помощью метода commit класса connection .
Обновление нескольких строк SQLite-таблицы
В последнем примере использовался метод execute() объекта cursor для обновления одного значения, но иногда в приложениях Python нужно обновить несколько строк. Например, нужно увеличить зарплату большинства разработчиков на 20%.
Вместе выполнения операции UPDATE каждый раз для каждой записи можно выполнить массовое обновление в один запрос. Изменить несколько записей в таблице SQLite в один запрос можно с помощью метода cursor.executemany() .
Метод cursor.executemany(query, seq_param) принимает два аргумента: SQL-запрос и список записей для обновления.
Посмотрим на примере. Здесь обновляется зарплата 3 разработчиков.
import sqlite3
def update_multiple_records(record_list):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_update_query = """Update sqlitedb_developers set salary = ? where /> cursor.executemany(sqlite_update_query, record_list)
sqlite_connection.commit()
print("Записей", cursor.rowcount, ". Успешно обновлены")
sqlite_connection.commit()
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
records_to_update = [(9700, 4), (7800, 5), (8400, 6)]
update_multiple_records(records_to_update)Вывод: таблица sqlitedb_developers после обновления нескольких строк из Python.
Подключен к SQLite Записей 3 . Успешно обновлены Соединение с SQLite закрыто
Проверить результат можно, получив данные из таблицы из Python.
- После подключения к таблице SQLite готовится SQLite-запрос с двумя заполнителями (колонки salary и id), а также список записей для обновления в формате кортежа.
- Каждый элемент – это кортеж для каждой записи. Каждый кортеж содержит два значения: зарплату и id разработчика.
- Функция cursor.executemany(sqlite_update_query, record_list) вызывается для обновления нескольких строк таблицы SQLite.
- Чтобы узнать, какое количество записей было изменено, используется функция cursor.rowcount . Наконец, данные сохраняются в базу данных с помощью метода commit класса connection .
Обновление нескольких колонок таблицы SQLite
Можно обновить несколько колонок таблицы SQLite в один запрос. Для этого нужно лишь подготовить запрос с параметрами и заполнителями. Посмотрим на примере.
Вывод: таблица sqlitedb_developers после обновления нескольких колонок.
import sqlite3
def update_multiple_columns(dev_id, salary, email):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_update_query = """Update sqlitedb_developers set salary = ?, email = ? where /> column_values = (salary, email, dev_id)
cursor.execute(sqlite_update_query, column_values)
sqlite_connection.commit()
print("Несколько столбцов успешно обновлены")
sqlite_connection.commit()
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
update_multiple_columns(3, 2500, 'bec9988@gmail.com')Подключен к SQLite Несколько столбцов успешно обновлены Соединение с SQLite закрыто