Ниже представлен код, который использует именованные параметры в запросе к базе данных SQLite.
import sqlite3
def fetch_tasks_by_status_and_project_named(db_name, status, project_name):
connection = sqlite3.connect(db_name)
# Установка row_factory для получения данных в виде словарей
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
# Определение запроса с именованными параметрами и явным указанием колонок
query = """
SELECT id, priority, description, status, deadline, completed, project
FROM tasks
WHERE status = :status AND project = :project
"""
# Выполнение запроса с использованием именованных параметров
cursor.execute(query, {"status": status, "project": project_name})
rows = cursor.fetchall()
for row in rows:
print(
f"ID: {row['id']}, Priority: {row['priority']}, Description: {row['description']}, "
f"Status: {row['status']}, Deadline: {row['deadline']}, Completed: {row['completed']}, "
f"Project: {row['project']}"
)
connection.close()
if __name__ == "__main__":
fetch_tasks_by_status_and_project_named("projects_and_tasks.db", "pending", "Learn Python")
Что произойдет, если в запросе используются неверные имена именованных параметров (например, :stat вместо :status)?
- Запрос выполнится успешно, но данные для параметра :stat не будут включены в результат.
- Возникнет ошибка выполнения, так как указанный параметр не найден в запросе.
- Запрос выполнится, но результат будет пустым, так как параметр :status не будет учитываться.
- Запрос выполнится и вернет неверные данные, так как параметр :stat заменится на :status.