psycopg2 copy_fromは、セロリタスクで同期接続を使用して非同期プログラミングエラーを発生させます

asynchronous celery psycopg2 python sqlbulkcopy

質問

私の問題は私が直面していることです

ProgrammingError:copy_fromを非同期コールバックで使用することはできません。

非同期接続なしでcopy_fromしようとしています。これは、私はセロリの仕事からの接続を作成していると述べる必要があります。誰かが、私のpsycopg2接続が非同期のように振る舞うように、どのようにsqlalchemyかセロリか何かを手掛かりにすることができますか?

conn = psycopg2.connect(con_string)
conn.async
>>0
cur = conn.cursor()    
data = BytesIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)
curs.copy_from(data, 'test_copy')

人気のある回答

私たちはpgcliでこのエラーに直面していました。その場合、wait_callbackは接続がpsycopg2の観点から非同期であるかのように動作していたことが判明しました。これは以下を助けました:

from contextlib import contextmanager

@contextmanager
def _paused_thread():
    try:
        thread = psycopg2.extensions.get_wait_callback()
        psycopg2.extensions.set_wait_callback(None)
        yield
    finally:
        psycopg2.extensions.set_wait_callback(thread)

with _paused_thread():
    cursor.copy_expert('copy mytable to STDOUT', file)


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ