读数据库遇到的错误都很迷:
首先出现的错误是:
psycopg2.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
这个可能是数据库连接ip池导致的问题,还有就是网络的问题:
第二个问题:
SSL SYSCALL error: Software caused connection abort (0x00002745/10053)
这个问题是程序本身造成的,调用con的需要在同一个函数里面,不能通过返回con来调用使用它;
总结来说,就是一个ssh数据库连接只能是在局部作用域中使用,不能在将他作为一个函数返回之后在用它进行其他操作:
def get_psql_connection_obj1(self,is_ssh): if is_ssh: with SSHTunnelForwarder((jdbc.ssh_host, jdbc.ssh_port), ssh_password=jdbc.ssh_password, ssh_username=jdbc.ssh_username, remote_bind_address=(jdbc.host, jdbc.port)) as server: __conn = psycopg2.connect( host='localhost', port=server.local_bind_port, database=jdbc.database, user=jdbc.user, password=jdbc.password ) data = pd.read_sql(con=__conn, sql=sql_script.prediciton_query_string) return data else: __conn = psycopg2.connect( host=jdbc.host, port=jdbc.port, database=jdbc.database, user=jdbc.user, password=jdbc.password ) data = pd.read_sql(con=__conn,sql=sql_script.prediciton_query_string) return data
这里把pd.read_sql写在函数的外面将导致问题