В этом руководстве вы научитесь запрашивать одну или несколько строк из таблицы 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(), чтобы извлечь все строки из запроса.

