У меня есть следующий код Python, который запускает несколько запросов SQL в базе данных Oracle и объединяет их в один фрейм данных.
Запросы существуют в текстовом файле, и каждая строка представляет собой отдельный запрос SQL. Цикл последовательно выполняет запросы. Я хочу отменить любые запросы SQL, которые выполняются более 10 секунд, чтобы не создавать накладных расходов в базе данных.
Следующий код на самом деле не дает результаты, которые я хочу. В частности, этот фрагмент кода действительно помогает мне в моей проблеме:
if (time.time() - start) > 10:
connection.cancel()
Полный код Python выглядит следующим образом. Вероятно, это функция оракула, которая может быть вызвана для отмены запроса.
import pandas as pd
import cx_Oracle
import time
ip = 'XX.XX.XX.XX'
port = XXXX
svc = 'XXXXXX'
dsn_tns = cx_Oracle.makedsn(ip, port, service_name = svc)
connection = cx_Oracle.connect(user='XXXXXX'
, password='XXXXXX'
, dsn=dsn_tns
, encoding = "UTF-8"
, nencoding = "UTF-8"
)
filepath = 'C:/XXXXX'
appended_data = []
with open(filepath + 'sql_queries.txt') as fp:
line = fp.readline()
while line:
start = time.time()
df = pd.read_sql(line, con=connection)
if (time.time() - start) > 10:
connection.cancel()
print("Cancel")
appended_data.append(df)
df_combined = pd.concat(appended_data, axis=0)
line = fp.readline()
print(time.time() - start)
fp.close()