У меня странное поведение, когда у меня несколько запросов к одному и тому же курсору:
предыдущий запрос - SELECT * FROM template WHERE id = 10, результат - 1 строка, извлекается с помощью .fetchone ()
затем:
print(cnx.cur.query)
# output OK: b"SELECT * FROM template WHERE id=10"
print(cnx.cur.statusmessage)
# output OK: SELECT 1
cnx.cur.execute("SELECT * FROM msg WHERE id=%s ORDER BY ts DESC LIMIT 1", [345])
print(cnx.cur.query)
# output OK: b"SELECT * FROM msg WHERE id=345 ORDER BY ts DESC LIMIT 1"
print(cnx.cur.statusmessage, cnx.cur.rowcount)
# output OK: 1 1
row = cnx.cur.fetchone()
print(row)
# output KO: prints result from previous query, ie table template
Соединение psycopg2 pg всегда остается открытым в течение нескольких недель с использованием одних и тех же курсоров (один RealDictCursor, один DictCursor в зависимости от моего запроса).
Но впервые за многие годы у меня возникают такие коллизии, понимаете?
отредактировано:
создание нового курсора (DictCursor) и того же cnx- перед .execute () и закрытие его после .fetchone () для каждого запроса не сильно меняется, но время от времени результат последнего запроса (строка из шаблона, а не из сообщения)