выполнить невозможно, пока выполняется асинхронный запрос - PullRequest
0 голосов
/ 27 апреля 2020

Я постоянно получаю сообщение об ошибке

psycopg2.ProgrammingError: execute cannot be used while an asynchronous query is underway

Насколько я понимаю, из-за этого я пытаюсь использовать данные, пока запрос еще не завершен. Как я могу это исправить? Я использую что-то вроде этого (flask + socket.io + psycopg2), если укоротить код до хорошего примера:

def wait(conn):
    while True:
        state = conn.poll()
        if state == psycopg2.extensions.POLL_OK:
            break
        elif state == psycopg2.extensions.POLL_WRITE:
            select.select([], [conn.fileno()], [])
        elif state == psycopg2.extensions.POLL_READ:
            select.select([conn.fileno()], [], [])
        else:
            raise psycopg2.OperationalError("poll() returned %s" % state)

try:
    aconn = psycopg2.connect(f"dbname='{db_name}' user='{db_user}' host='{db_host}' password='{db_pass}'", async_=1)
    wait(aconn)
    c = aconn.cursor()
except Exception as e:
    print('Exception:', str(e))

@socketio.on('uploaddata')
def on_send(data):
    id = data['id']
    lablvlid = data['lablvlID']
    player = data['player']
    s = f"select * from cart_plcl where id='{id}' and lablvlid ='{lablvlid}' and player='{player}'"
    c.execute(s)
    wait(c.connection)
    result = c.fetchall()
    for r in result:
        #do something
...