В функции нужны корректные отступы, гарантированное закрытие cursor и connection, явный выбор полей и ограничение объёма результата; fetchall() загружает все строки в память.
def fetch_users():
В функции нужны корректные отступы, гарантированное закрытие cursor и connection, явный выбор полей и ограничение объёма результата; fetchall() загружает все строки в память.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
def fetch_users():
conn = db.connect("my_database")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
return result
Ответ
В функции нужны корректные отступы, гарантированное закрытие cursor и connection, явный выбор полей и ограничение объёма результата; fetchall() загружает все строки в память.
Конкретный API зависит от драйвера, но общий шаблон такой:
from contextlib import closing
def fetch_users():
with closing(db.connect("my_database")) as conn:
with closing(conn.cursor()) as cursor:
cursor.execute("SELECT id, name FROM users")
return cursor.fetchall()
Поля id и name здесь пример ожидаемой схемы. Для большой таблицы нужны пагинация или пакетное чтение. При использовании пула соединение возвращают способом, предусмотренным пулом. Внешние параметры SQL передают через placeholders драйвера, а не конкатенацией строк.