Как настроить тайм-аут в sqlalchemy с помощью поляровPython

Программы на Python
Anonymous
Как настроить тайм-аут в sqlalchemy с помощью поляров

Сообщение Anonymous »

Я запускаю цикл for в DataFrame, но некоторые запросы выполняются дольше, чем ожидалось, что приводит к преждевременному завершению процесса. Я хотел бы добавить условие: если соединение занимает более n секунд, цикл должен перейти к следующему значению в DataFrame. Кроме того, я хочу пометить строку значением тайм-аута в определенном столбце.
Мой код:

Код: Выделить всё

import polars as pl
from sqlalchemy import create_engine, MetaData, Table , select, func, case, literal_column, literal, distinct, and_, or_, extract

E27V422024= create_engine('mssql://'+'xd'+'/'+'WMBDP2024'+'?trusted_connection=yes&driver=ODBC+Driver+17+for+SQL+Server',
pool_size= 0, max_overflow=0
)

concatenated_df = pl.DataFrame()

for row in first_five_rows.to_dicts():
rut = row['Rut']
fechaI = row['FechaEnvio']
fechaO = row['FechaTermino']

# Execute the query and store the result in a temporary DataFrame
temp_df = pl.read_database(f"""
SELECT
rut,
codtran,
coderr,
monto,
fecha
FROM database
WHERE rut = {rut} AND fecha BETWEEN '{fechaI}' AND '{fechaO}'
AND codtran IN ('MPMR80', 'MPMR22', 'SCULOE')
""", connection=E27V422024.connect())
if temp_df.shape[0] == 0:
data = {"rut": rut,
"codtran": 'nop',
"coderr": 'nop',
"monto": 8888,
"fecha":fechaI}

data_df = pl.DataFrame(data, schema={"rut": pl.Int64(),
"codtran": pl.String(),
"coderr": pl.String(),
"monto": pl.Decimal(),
"fecha": pl.Datetime()}, strict=False)

temp_df = data_df
else:
pass

concatenated_df = pl.concat([concatenated_df, temp_df])

print(concatenated_df)
Будем очень признательны за любые советы по решению этой проблемы.
Я искал и нашел код с такими библиотеками, как psycopg2 и gevent. Однако я думаю, что есть простой способ решить эту проблему.
Некоторая дополнительная информация:
Я использую Polars, сервер находится на сервере Microsoft sql. .
Обновление:
Я только что добавил в create_enige следующее:

Код: Выделить всё

create_engine('base',pool_size= 0, max_overflow=0, connect_args={'timeout': 2})
Теперь мой процесс не отменяется, однако мне все еще нужно сохранить значения, которые возвращают TimeOut.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-polars

Вернуться в «Python»