早上好!
我有一个小脚本,试图在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
。
非常感谢您!