В этом руководстве вы узнаете, как обновлять данные в таблице SQL Server из программы на Python.
Это руководство начинается с того места, где закончилось руководство по массовому копированию.
Обновление данных в таблице
Шаг 1. Создайте новый файл update.py в каталоге проекта.
Шаг 2. Определите функцию update_customer_email, которая обновляет адрес электронной почты клиента:
import logging from connect import create_connection def update_customer_email(customer_id: int, email: str) -> bool: # Connect to the SQL Server conn = create_connection() if conn is None: return False # Update the customer email with(conn, conn.cursor() as cursor): cursor.execute( "UPDATE Customers SET Email = %s WHERE CustomerID = %s", (email, customer_id), ) conn.commit() logging.info(f'{cursor.rowcount} rows updated successfully.') return True if cursor.rowcount == 1 else False
Как это работает.
Сначала импортируем встроенный модуль ведения журнала:
import logging
Во-вторых, импортируйте функцию create_connection из модуля connect :
from connect import create_connection
В-третьих, определите функцию update_customer_email, которая принимает идентификатор клиента(customer_id), который идентифицирует клиента для обновления, и новый адрес электронной почты клиента(email):
def update_customer_email(customer_id: int, email: str) -> bool:
Функция возвращает значение true, если она успешно обновляет адрес электронной почты клиента, и false в противном случае.
В-четвертых, создайте соединение с SQL Server и верните false, если соединение не удалось:
conn = create_connection() if conn is None: return False
В-пятых, управляйте объектами Connection и Cursor в операторе with, чтобы избежать их ручного закрытия:
with(conn, conn.cursor() as cursor):
В-шестых, создайте объект Cursor и выполните оператор UPDATE, который обновляет адрес электронной почты клиента по идентификатору:
cursor.execute( "UPDATE Customers SET Email = %s WHERE CustomerID = %s", (email, customer_id), )
Обратите внимание, что мы используем оператор UPDATE с параметризованными значениями для предотвращения атак с использованием SQL-инъекций.
В-седьмых, вызовите метод commit() объекта Connection, чтобы навсегда сохранить изменения в базе данных:
conn.commit()
Наконец, запишите количество обновленных строк, обратившись к свойству rowcount объекта Cursor, и верните True, чтобы указать, что обновление прошло успешно, или False в противном случае:
logging.info(f'{cursor.rowcount} rows updated successfully.') return True if cursor.rowcount == 1 else False
Шаг 3. Измените модуль main.py для использования функции update_customer_email:
import logging, sys from update import update_customer_email # config logging to console logging.basicConfig( stream=sys.stdout, encoding='utf-8', format='%(levelname)s:%(message)s', level=logging.DEBUG ) # update customer email update_customer_email(1, ' [email protected] ')
Как это работает(мы сосредоточимся на части, посвященной обновлению).
Сначала импортируйте update_customer_email из модуля обновления:
from update import update_customer_email
Во-вторых, вызовите функцию update_customer_email, чтобы обновить адрес электронной почты клиента с идентификатором 1 на « [email protected] »:
update_customer_email(1, ' [email protected] ')
Шаг 4. Запустите SQL Server Management Studio(SSMS), подключитесь к SQL Server и выполните следующий запрос для получения данных от клиента с идентификатором 1:
SELECT * FROM customers WHERE customerID = 1;
Выход:
Шаг 5. Откройте терминал и выполните следующую команду для запуска файла main.py:
python main.py
Выход:
INFO:1 rows updated successfully
Шаг 6. Выполните следующий запрос еще раз, чтобы проверить обновление:
SELECT * FROM customers WHERE customerID = 1;
Выход:
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте метод execute() объекта Cursor для выполнения оператора UPDATE с целью обновления данных в таблице SQL Server.