Перейти к содержимому

Sqlite как изменить значение

  • автор:

UPDATE и DELETE – обновление и удаление данных

Операторы UPDATE и DELETE надо использовать с осторожностью. Если с помощью WHERE не заданы обновляемые или удаляемые строки, будут обновлены или удалены все записи таблицы. Поэтому данные команды почти всегда используются совместно с WHERE.

UPDATE … SET – обновление полей записи

UPDATE имя_таблицы SET имя_столбца = новое_значение WHERE условие;

Чаще всего условием является ID конкретной записи, в результате чего обновляется только она:

sqlite> UPDATE pages SET num = 10 . > WHERE _id = 3;

Однако можно указывать другие столбцы:

sqlite> UPDATE pages SET num = 1 . > WHERE num = 100;

При этом будут обновлены все записи, в которых указанное в условии поле имеет соответствующее значение.

DELETE FROM – удаление записей таблицы

Синтаксис команды удаления из таблицы одной или нескольких записей:

DELETE FROM имя_таблицы WHERE условие;

Без WHERE будут удалены все строки, однако сама таблица останется. Она будет пустой. Для удаления самой таблицы из базы данных используется команда DROP TABLE имя_таблицы; .

sqlite> DELETE FROM pages WHERE _id = 6; sqlite> DELETE FROM pages WHERE theme = 2;

X Скрыть Наверх

Введение в реляционные базы данных. SQLite

Sqlite как изменить значение

Команда REPLACE по сути является сокращением от INSERT OR REPLACE . Ее идея состоит в следующем. Пи вставке данных может нарушаются ограничения UNIQUE или PRIMARY KEY , например, когда мы пытаемся добавить для столбца, который должен иметь уникальные значения, данные, которые уже есть в таблице. Этот конфликт ограничений призвана разрешить команда REPLACE .

Эта команда сначала удаляет строку, которая вызвала конфликт на уникальность данных, и затем вместо нее вставляет новую строку. То есть фактически все выглядит как замена строки.

Если происходит конфликт с ограничением NOT NULL (в столбец, для которого задано ограничение NOT NULL , вставляется значение NULL), команда REPLACE заменяется вставляемое значение NULL значением по умолчанию, которое принято для этого столбца. Если для столбца не установлено значение по умолчанию, то выполнение запроса отменяется.

Если конфликтов с ограничениями не происходит, то команда REPLACE по сути действует аналогично команде INSERT .

Команда REPLACE имеет следующий формальный синтаксис:

INSERT OR REPLACE INTO table(столбец1, столбец2, . столбецN) VALUES(значение1, значение2, . значениеN);

Вместо INSERT OR REPLACE можно писать просто REPLACE .

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

DROP TABLE IF EXISTS users; CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, age INTEGER DEFAULT 18 ); INSERT INTO users (name, age) VALUES ('Tom', 37), ('Bob', 41), ('Sam', 29);

Здесь для столбца name задано ограничение UNIQUE , то есть не может быть двух строк, у которых в этом столбце будет одно и то же значение.

Посмотрим эту команду в деле. Выше в определении таблице были добавлены начальные данные, где для одного из пользователей задано имя «Tom». И вначале попробуем добавить нового пользователя с тем же именем с помощью стандартной команды INSERT :

INSERT INTO users (name, age) VALUES ('Tom', 22);

Команда REPLACE OR INSERT в SQLite

И при выполнении мы столкнемся с ошибкой, которая говорит, данный запрос нарушает ограничение по уникальности столбца name.

Теперь попробуем добавить те же самые данные, только с помощью команды REPLACE :

REPLACE INTO users (name, age) VALUES ('Tom', 22);

Эта команда удалить ранее добавленную стоку, где name ./pics/3.20.png» alt=»Команда REPLACE INTO в SQLite» />

Как найти и изменить значение в БД? SQLite

Работаю с БД SQLite. Дополнительно работаю с ботом в ВКонтакте. Так вот, я не могу понять, как сделать команду, которая будет изменять значение с БД по поиску другого значения. То есть, есть команда для бота — /ник, где есть два значения. /ник [Пользователь] , где пользователь это имя, которое находится в БД. И /ник [Пользователь] [Ник] , где ник это значение, которое нужно указать для изменения в БД. Вот, как я это всё представил:

first_name last_name nickname Вася Петров NULL 

Пишу команду для бота: /ник Вася (либо Петров) VasyaPetrov

first_name last_name nickname Вася Петров VasyaPetrov 

Подскажите пожалуйста, как это сделать.

Отслеживать

149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака

задан 3 авг 2019 в 12:31

669 8 8 серебряных знаков 18 18 бронзовых знаков

Обновление данных в 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 закрыто

Проверить результат можно, посмотрев данные из таблицы.

Обновления одной записи в таблице 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.

Использование переменных Python в запросе UPDATE

  • Запрос с параметрами был использован для того, чтобы получить значения при работе программы и установить их на места заполнителей. В этом случае один из них отвечает за колонку «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 готовится 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 закрыто

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *