В этом руководстве вы научитесь запрашивать одну или несколько строк из таблицы SQL Server на Python с помощью API pymssql.
Это руководство начинается с того места, где закончилось руководство по обновлению данных в таблице из программы Python.
Выбор одной строки
Шаг 1. Создайте новый модуль query.py в каталоге проекта.
Шаг 2. Определите функцию, которая находит клиента по идентификатору:
def find_customer_by_id(customer_id: int) -> dict | None: # Connect to the SQL Server conn = create_connection() if conn is None: return None # Find the customer sql = """SELECT CustomerID, FirstName, LastName, Email, PhoneNumber, Address FROM CustomerXs WHERE CustomerID = %s""" # Execute the query with(conn, conn.cursor() as cursor): cursor.execute(sql,(customer_id,)) row = cursor.fetchone() return row
Как это работает.
Сначала импортируем встроенный модуль ведения журнала:
import logging
Во-вторых, импортируйте create_connection из модуля connect :
from connect import create_connection
В-третьих, определите функцию find_customer_by_id, которая возвращает клиента по customer_id:
def find_customer_by_id(customer_id: int) -> tuple | None:
В-четвертых, подключитесь к SQL Server, вызвав функцию create_connection():
conn = create_connection() if conn is None: return None
Если соединение не удалось, немедленно вернуть True.
В-пятых, сформируйте запрос, который находит клиента по идентификатору:
sql = """SELECT CustomerID, FirstName, LastName, Email, PhoneNumber, Address FROM Customers WHERE CustomerID = %s"""
В запросе %s — это параметризованный заполнитель, который может предотвратить атаки с использованием SQL-инъекций.
В-шестых, создайте объект Cursor из объекта Connection и управляйте объектами Connection и Cursor в операторе with :
with(conn, conn.cursor(as_dict=True) as cursor):
В-седьмых, выполните оператор SELECT, вызвав метод execute() объекта Cursor со значением customer_id:
cursor.execute(sql,(customer_id,))
Восьмое, извлеките одну строку из набора результатов запроса с помощью метода fetchone():
row = cursor.fetchone()
Девятое, верните извлеченную строку:
return row
Шаг 3. Измените файл main.py, чтобы использовать функцию find_customer_by_id():
import logging, sys from query import find_customer_by_id # config logging to console logging.basicConfig( stream=sys.stdout, encoding='utf-8', format='%(levelname)s:%(message)s', level=logging.DEBUG ) customer = find_customer_by_id(1) print(customer)
Как это работает.
Сначала импортируем find_customer_by_id из модуля запроса:
from query import find_customer_by_id
Во-вторых, вызовите функцию find_customer_by_id(), чтобы получить данные о клиенте с идентификатором 1:
customer = find_customer_by_id(1)
В-третьих, выведите данные клиента на терминал:
print(customer)
Выход:
(1, 'Stephen', 'Johnson', ' [email protected] ', '001-301-795-6575x030', '225 Clark Springs, Sarahhaven, AK 81481')
Результатом является кортеж, включающий поля клиентов.
Чтобы изменить результат на словарь, установите аргумент as_dict в значение True при создании курсора:
with conn.cursor(as_dict=True) as cursor:
Если вы выполните модуль main.py, вывод будет выглядеть так:
{'CustomerID': 1, 'FirstName': 'Stephen', 'LastName': 'Johnson', 'Email': ' [email protected] ', 'PhoneNumber': '001-301-795-6575x030', 'Address': '225 Clark Springs, Sarahhaven, AK 81481'}
Результатом является словарь, ключами которого являются столбцы в списке выбора запроса.
Выбор нескольких строк
Шаг 1. Добавьте функцию find_customers в модуль query.php, которая находит клиентов по именам с помощью оператора LIKE:
def find_customers(term: str) -> list[dict] | None: conn = create_connection() if conn is None: return None # Find the customer sql = """SELECT * FROM Customers WHERE FirstName LIKE %s ORDER BY FirstName""" name = f'%{term}%' with(conn, conn.cursor(as_dict=True) as cursor): cursor.execute(sql,(name,)) return cursor.fetchall()
Как это работает.
Сначала определите функцию find_customers, которая принимает поисковый запрос и возвращает словарь, содержащий данные о клиентах.
def find_customers(term: str) -> dict | None:
Во-вторых, установите соединение с SQL Server, вызвав функцию create_connection():
conn = create_connection() if conn is None: return None
Если соединение не удалось, немедленно верните None.
В-третьих, создайте оператор SELECT, который использует оператор LIKE для сопоставления имени клиента:
sql = "SELECT * FROM Customers WHERE FirstName LIKE %s ORDER BY FirstName"
В-четвертых, добавьте подстановочные знаки % к поисковому запросу и присвойте результат переменной name:
name = f'%{term}%'
В-пятых, создайте объект Cursor, выполните оператор SELECT, вызовите fetchall() для извлечения всех строк и немедленно верните их:
with(conn, conn.cursor(as_dict=True) as cursor): cursor.execute(sql,(name,)) return cursor.fetchall()
Шаг 2. Измените main.py, чтобы использовать функцию find_customers:
import logging, sys from query import find_customers # config logging to console logging.basicConfig( stream=sys.stdout, encoding='utf-8', format='%(levelname)s:%(message)s', level=logging.DEBUG ) # Find the customers whose first name starts with 'Jos' customers = find_customers('Jos') for customer in customers: print(f'{customer["FirstName"]} {customer["LastName"]}')
Шаг 3. Запустите файл main.py:
python main.py
Выход:
Jose Williams Joseph Spencer Joseph Wood Joseph Lawrence ...
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Вызовите метод fetchone() для извлечения одной строки из запроса.
- Вызовите метод fetchall(), чтобы извлечь все строки из запроса.