Я хочу знать, как правильно закрыть соединение с базой данных Postgres с помощью операторов и psyopcg2.
import pandas as pd
import psycopg2
def create_df_from_postgres(params: dict,
columns: str,
tablename: str,
) -> pd.DataFrame:
with psycopg2.connect(**params) as conn:
data_sql = pd.read_sql_query(
"SELECT " + columns + ", SUM(total)"
" AS total FROM " + str(tablename),
con=conn
)
# i need to close conection here:
# conn.close()
# or here:
conn.close()
return data_sql
Это лучший способ обработки соединения?
def get_ci_method_and_date(params: dict,
columns: str,
tablename: str,
) -> pd.DataFrame:
try:
connection = psycopg2.connect(**params)
data_sql = pd.read_sql_query('SELECT ' + columns +
' FROM ' + str(tablename),
con=connection
)
finally:
if(connection):
connection.close()
return data_sql
Из официальных документов psycopg
Предупреждение В отличие от файловых объектов или других ресурсов, выход из соединения с блоком не закрывает соединение, а только связанную транзакциюк этому.Если вы хотите убедиться, что соединение закрыто после определенного момента, вы все равно должны использовать блок try-catch:
conn = psycopg2.connect(DSN)
try:
# connection usage
finally:
conn.close()