Доброе утро!
У меня есть небольшой скрипт, который пытается выполнить операцию вставки в таблицу postgres.
Моя программа, которая отвечает за установление соединений с базой данных, выглядит следующим образом:
def conecta_server(lista, names):
PUERTO = 5432
success = False
retries = 0
max_retries = 10
while not success and retries < max_retries:
try:
with SSHTunnelForwarder((REMOTE_SERVER, 22),
ssh_username = "user",
ssh_pkey = ssh_pkey,
ssh_private_key_password = "",
remote_bind_address = ('127.0.0.1', PUERTO),
local_bind_address = ('', PUERTO)) as tunnel:
engine = sqlalchemy.create_engine("postgresql+psycopg2://{user}:{passw}@{host}:{port}/{db}".format(
user = 'user',
passw = 'pass',
host = tunnel.local_bind_host,
port = tunnel.local_bind_port,
db = 'db'))
with engine.connect() as conn:
dic_df = {name: pd.DataFrame(conn.execute(query).fetchall(), columns = conn.execute(query).keys()) for (query, name) in zip(lista, names)}
return dic_df
except Exception as e:
print('Error al intentarlo...')
print(e)
retries += 1
Обычно я использую этот код для операций выбора, но, как я уже сказал, теперь мне нужно сделать вставку.
При этом возникает следующая ошибка:
*** sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.
Странно то, что запрос действительно выполняется без проблем, но когда возникает исключение, сценарий не покидает какое-то время и выполняется 10 раз.
Есть ли способ избежатьЭта проблема? Я не знаю, можно ли установить соединение с помощью метода, отличного от fetchall ()
, предварительно выбрав его на основе результата теста conn.execute (query) .returns_rows
.
Заранее большое спасибо!