- Обновление данных в SQLite-таблице
- Подготовка
- Обновления одной записи в таблице SQLite
- Разбор примера в подробностях
- Использование переменных Python в запросе UPDATE
- Обновление нескольких строк SQLite-таблицы
- Обновление нескольких колонок таблицы SQLite
- Sqlite3 python обновление данных
- Добавление данных
- Установка параметров
- Множественная вставка
- Получение данных
- Получение всех строк
- Получение части строк
- Получение одной строки
- Обновление
- Удаление данных
Обновление данных в SQLite-таблице
В этом руководстве рассказывается, как обновить таблицу SQLite с помощью запроса UPDATE из приложения, написанного на Python. Вы узнаете, как обновить таблицу SQLite с помощью встроенного модуля sqlite3.
В этой статье вы узнаете, как
Подготовка
Прежде чем выполнять любую из следующих операций обновления таблицы SQLite, убедитесь, что вы знаете имя таблицы и имя столбца.
В данном примере таблица sqlitedb_developers . Он был создан в части 1 руководства sqlite3 и заполнен в части 2.
Обновления одной записи в таблице SQLite
Текущая таблица sqlitedb_developers содержит шесть строк, поэтому давайте обновим зарплату разработчика с id 4. Чтобы выполнить запрос UPDATE из Python, нам нужно выполнить следующие шаги.
Давайте посмотрим на программу.
Копия копия копия копия копия Используйте другой браузер
импортировать sqlite3
def update_sqlite_table():
Вы можете попробовать
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)
if sqlite_connection.
if sqlite_connection:
sqlite_connection.close().
print(«Соединение SQLite закрыто.»)
update_sqlite_table()
Выход: Таблица sqlitedb_developers После обновления строки из Python.
Подключен к SQLite Запись успешно обновлена Соединение с SQLite закрыто
Результат можно увидеть в данных, приведенных в таблице.
Разбор примера в подробностях
sqlite3.connect() и connection.cursor() :
Затем создается запрос UPDATE для обновления строк таблицы. Указываются имена столбцов и новые значения. В таблице пять столбцов, но код обновит только один из них — столбец, содержащий данные о зарплате.
Наконец, в сursor и соединение в блоке finally блок.
Примечание: Если вам нужно откатить изменения, если при выполнении операции массового обновления произошла хотя бы одна ошибка, вы можете использовать параметр rollback() класс. connection . блок класса rollback(). except .
Использование переменных Python в запросе UPDATE
В большинстве случаев вам нужно будет обновить таблицу значениями, которые вы получите при запуске программы. Например, когда пользователь обновляет свой профиль в графическом интерфейсе, необходимо обновить значения, установленные в соответствующих таблицах.
В таких случаях рекомендуется использовать параметризованный запрос. В таком запросе в качестве местозаполнителя ( ? ) в операторе SQL. Это позволяет использовать переменные для обновления значений и предотвращения SQL-инъекций.
Копия копия копия копия копия Используйте другой браузер
импортировать sqlite3
def update_sqlite_table(dev_id, salary):
Вы можете попробовать
sqlite_connection = sqlite3.connect(‘sqlite_python.db’)
cursor = sqlite_connection.cursor()
print(«Подключился к SQLite»)
sql_update_query = «»»Update sqlitedb_developers set salary = ? where данные = (зарплата, dev_id)
Cursor.execute(sql_update_query, data)
sqlite_connection.commit()
print(«запись была успешно обновлена»)
cursor.close()
except sqlite3.Error as error:
print(«Ошибка SQLite», error)
if sqlite_connection.
if sqlite_connection:
sqlite_connection.close().
print(«Соединение SQLite закрыто.»)
update_sqlite_table(3, 7500)
Выход: таблица sqlitedb_deveopers после обновления его с помощью запроса с использованием переменных и параметров Python.
Подключен к SQLite Запись успешно обновлена Соединение с SQLite закрыто
Давайте получим некоторые данные из таблицы SQLite из Python и посмотрим, как это работает.
Давайте проанализируем код.
Обновление нескольких строк SQLite-таблицы
В последнем примере метод execute() объект. cursor для обновления одного значения, но в приложениях Python может потребоваться обновление нескольких строк. Например, большинству разработчиков необходимо увеличить зарплату на 20%.
Вместо того чтобы выполнять операцию UPDATE каждый раз для каждой записи, мы можем выполнить массовое обновление с помощью одного запроса: Чтобы изменить несколько записей в таблице SQLite с помощью одного запроса, мы можем сделать следующее cursor.executemany() .
Метод заключается в следующем cursor.executemany(query, seq_param) который принимает два аргумента: SQL-запрос и список записей для обновления.
Давайте рассмотрим пример. Здесь мы приводим данные о зарплате трех разработчиков.
Копировать Копировать Использовать другой браузер
импортировать sqlite3
def update_multiple_records(record_list):
Вы можете попробовать
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)
if sqlite_connection.
if sqlite_connection:
sqlite_connection.close().
print(«Соединение SQLite закрыто»).
записи_к_обновлению = [(9700, 4), (7800, 5), (8400, 6)].
update_multiple_records(records_to_update)
Выход: таблица sqlitedb_developers После обновления нескольких строк из Python
Подключен к SQLite Записей 3 . Успешно обновлены Соединение с SQLite закрыто
Получив данные из таблицы из Python, мы можем проверить результат.
Обновление нескольких колонок таблицы SQLite
Можно обновить несколько столбцов таблицы SQLite с помощью одного запроса. Все, что вам нужно сделать, это подготовить запрос с параметрами и заполнителями. Давайте рассмотрим пример.
Выход: Таблица sqlitedb_developers После обновления нескольких столбцов
копия копия копия копия используйте другой браузер
Подключен к SQLite Несколько столбцов успешно обновлены Соединение с SQLite закрыто
Sqlite3 python обновление данных
Рассмотрим основные операции с базой данных SQLite с помощью библиотеки sqlite3 на примере таблицы:
CREATE TABLE people ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER )
Добавление данных
Для добавления данных применяется SQL-инструкция INSERT . Для добавления одной строки используем метод execute() объекта Cursor:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # добавляем строку в таблицу people cursor.execute("INSERT INTO people (name, age) VALUES ('Tom', 38)") # выполняем транзакцию con.commit()
Здесь добавляется одна строка, где name = «Tom», а age = 38.
Выражение INSERT неявно открывает транзакцию, для завершения которой необходимо вызвать метод commit() текущего объекта Connection.
Установка параметров
С помощью второго параметра в метод execute() можно передать значения для параметров SQL-запроса:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # данные для добавления bob = ("Bob", 42) cursor.execute("INSERT INTO people (name, age) VALUES (?, ?)", bob) con.commit()
В данном случае добавляемые в БД значения представляют кортеж bob. В SQL-запросе вместо конкретных значений используются знаки подстановки ?. Вместо этих символов при выполнении запроса будут вставляться данные из кортежа data. Так, первый элемент кортежа — строка «Bob» передается на место первого знакак ?, второй элемент — число 42 передается на место второго знака ?.
И если мы посмотрим на содержимое базы данных, то найдем там все добавленные объекты:
Множественная вставка
Метод executemany() позволяет вставить набор строк:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # данные для добавления people = [("Sam", 28), ("Alice", 33), ("Kate", 25)] cursor.executemany("INSERT INTO people (name, age) VALUES (?, ?)", people) con.commit()
В метод cursor.executemany() по сути передается то же самое выражение SQL, только теперь данные определены в виде списка кортежей people. Фактически каждый кортеж в этом списке представляет отдельную строку — данные отдельного пользователя, и при выполнении метода для каждого кортежа будет создаваться свое выражение INSERT INTO
Получение данных
Для получения данных применяется SQL-команда SELECT . После выполнения этой команды курсор получает данные, которые можно получить с помощью одного из методов: fetchall() (возвращает список со всеми строками), fetchmany() (возвращает указанное количество строк) и fetchone() (возвращает одну в наборе строку).
Получение всех строк
Например, получим все ранее добавленные данные из таблицы people:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # получаем все данные из таблицы people cursor.execute("SELECT * FROM people") print(cursor.fetchall())
При выполнении этой программы на консоль будет выведен список строк, где каждая строка представляет кортеж:
[(1, 'Tom', 38), (2, 'Bob', 42), (3, 'Sam', 28), (4, 'Alice', 33), (5, 'Kate', 25)]
При необходимости мы можем перебрать список, используя стандартные циклические конструкции:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() cursor.execute("SELECT * FROM people") for person in cursor.fetchall(): print(f" - ")
Результат работы программы:
Tom - 38 Bob - 42 Sam - 28 Alice - 33 Kate - 25
Стоит отметить, что в примере выше необязательно вызывать метод fetchall, мы можем перебрать курсор в цикле как обычный набор:
for person in cursor: print(f" - ")
Получение части строк
Получение части строк с помощью метода fetchmany() , в который передается количество строк:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() cursor.execute("SELECT * FROM people") # извлекаем первые 3 строки в полученном наборе print(cursor.fetchmany(3))
Результат работы программы:
[(1, 'Tom', 38), (2, 'Bob', 42), (3, 'Sam', 28)]
Выполнение этого метода извлекает следующие ранее неизвлеченные строки:
# извлекаем первые 3 строки в полученном наборе print(cursor.fetchmany(3)) # [(1, 'Tom', 38), (2, 'Bob', 42), (3, 'Sam', 28)] # извлекаем следующие 3 строки в полученном наборе print(cursor.fetchmany(3)) # [(4, 'Alice', 33), (5, 'Kate', 25)]
Получение одной строки
Метод fetchone() извлекает следующую строку в виде кортежа значений и возвращает его. Если строк больше нет, то возвращает None :
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() cursor.execute("SELECT * FROM people") # извлекаем одну строку print(cursor.fetchone()) # (1, 'Tom', 38)
Данный метод удобно применять, когда нам надо извлечь из базы данных только один объект:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() cursor.execute("SELECT name, age FROM people WHERE раскладываем кортеж на две переменных name, age = cursor.fetchone() print(f"Name: Age: ") # Name: Bob Age: 42
Здесь получаем из бд строку с и полученный результат раскладываем на две переменных name и age (так как кортеж в Python можно разложить на отдельные значения)
Обновление
Для обновления в SQL выполняется команда UPDATE . Например, заменим у всех пользователей имя с Tom на Tomas:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # обновляем строки, где name = Tom cursor.execute("UPDATE people SET name ='Tomas' WHERE name='Tom'") # вариант с подстановками # cursor.execute("UPDATE people SET name =? WHERE name=?", ("Tomas", "Tom")) con.commit() # проверяем cursor.execute("SELECT * FROM people") print(cursor.fetchall()) # [(1, 'Tomas', 38), (2, 'Bob', 42), (3, 'Sam', 28), (4, 'Alice', 33), (5, 'Kate', 25)]
Для выполнения обновления также надо выполнять метод con.commit()
Удаление данных
Для удаления в SQL выполняется команда DЕLETE . Например, удалим всех пользователей с именем Bob:
import sqlite3; con = sqlite3.connect("metanit.db") cursor = con.cursor() # обновляем строки, где name = Tom cursor.execute("DELETE FROM people WHERE name=?", ("Bob",)) con.commit() # проверяем cursor.execute("SELECT * FROM people") print(cursor.fetchall()) # [(1, 'Tomas', 38), (3, 'Sam', 28), (4, 'Alice', 33), (5, 'Kate', 25)]
Для выполнения удаления также надо выполнять метод con.commit()