2017-02-22 16 views
1

I次のコードを持っている:このように自動再接続postgresqデータベース

import psycopg2 
conn = psycopg2.connect(database="****", user="postgres", password="*****", host="localhost", port="5432") 
print ("Opened database successfully") 
cur = conn.cursor() 
cur.execute('''select * from xyz''') 
print ("Table created successfully") 
conn.commit() 
conn.close() 

を私はいくつかの50 -60複雑なクエリを持っていますが、問題はpostgreのSQLデータベースは、以下のエラー

Traceback (most recent call last): 
    File "C:/Users/ruw2/Desktop/SQL.py", line 87, in <module> 
    cur.execute('''select * from xyz;''') 
psycopg2.DatabaseError: server conn crashed? 
server closed the connection unexpectedly. 
This probably means the server terminated abnormally before or while processing the request. 
に投げいくつかの回であります

接続が失われているように見えますが、私はどのようにPostgreデータベースに自動接続できますか? あなたの助けを歓迎します

+0

ほとんどのDBアダプタでは、自動的に再接続するフラグが用意されていますが、接続がタイムアウトする可能性は非常に高いです。別のオプションは、サーバーが実際にクラッシュした場合です。その場合、ログを確認してください。さらに、インターネットはあなたのクライアントとdbサーバの間に薄れている(localhost:5432がどこかに転送されている場合)。さらに別の可能性は、デッドロック(ありそうもない)、または結果セットが非常に大きいためにサーバーまたはクライアントが死ぬ(新しいバージョンを試す)ことです。 –

+0

返信いただきありがとうございますが、手動で実行するとうまく動作しますが、Pythonコードを実行して自動化すると、エラーが発生します。自動再接続のオプションはありますか? – iahmed

+0

"自動化するPythonコード"で私を失ってしまいました。それはあなたがより大きな問題を抱えているようです... –

答えて

0

例外をキャッチして再接続してください:

while True: 
    conn = psycopg2.connect(database="****", user="postgres", password="*****", host="localhost", port="5432") 
    cur = conn.cursor() 
    try: 
     cur.execute('''select * from xyz''') 
    except psycopg2.OperationalError: 
     continue 
    break; 
+0

私は上記のコードを使用し、例外が発生した場合、再びブロックを試して、タスクを実行することになります。基本的に私は例外の場合に再接続し、必要なクエリを実行したい。あなたの応答に感謝します。 – iahmed

+1

tryブロックには戻りません。代わりに、 'while'ループの先頭に戻ります。 –

+0

@IrfanAhmed @Mikeがコメントしたように、whileループを再起動して接続をやり直します。 –

関連する問題