Ядро SQLAlchemy engine.execute () против connection.execute () - PullRequest
0 голосов
/ 12 января 2019

Я играю с ядром SQLAlchemy в Python, и я много раз читал документацию и все еще нуждаюсь в пояснениях по поводу engine.execute() против connection.execute().

Насколько я понимаю, engine.execute() - это то же самое, что и connection.execute(), за которым следует connection.close().

Руководства, которым я следовал, позволили мне использовать это в моем коде:

Начальная настройка в скрипте

try:
    engine = db.create_engine("postgres://user:pass@ip/dbname", connect_args={'connect_timeout': 5})
    connection = engine.connect()
    metadata = db.MetaData()
except exc.OperationalError:
    print_error(f":: Could not connect to {db_ip}!")
    sys.exit()

Затем у меня есть функции, которые обрабатывают мой доступ к базе данных, например:

def add_user(a_username):
    query = db.insert(table_users).values(username=a_username)
    connection.execute(query)

Должен ли я звонить connection.close() до окончания моего сценария? Или это достаточно эффективно? Мне лучше закрыть соединение в конце add_user(), или это неэффективно?

Если мне нужно позвонить connection.close() до окончания работы сценария, означает ли это, что прерывание сценария приведет к зависанию соединений в моей базе данных Postgres?

1 Ответ

0 голосов
/ 13 января 2019

Я нашел этот пост полезным, чтобы лучше понять различные парадигмы взаимодействия в sqlalchemy, если вы еще не читали его.

Относительно вашего вопроса относительно того, когда закрывать соединение с БД: действительно, очень неэффективно создавать и закрывать соединения для каждого выполнения оператора. Однако вы должны убедиться, что ваше приложение не имеет утечек соединения в своем глобальном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...