Postgres подключение в python - PullRequest
       17

Postgres подключение в python

0 голосов
/ 05 августа 2020

Я изо всех сил пытаюсь установить sh соединение внутри итерации данных. Означает, что я выполняю запрос выбора к postgres и повторяю возвращаемые данные. после некоторого преобразования я записываю его в другую таблицу. Но это не работает. Пример кода python приведен ниже.

conn = pgconn(------)
cursor = pgconn.Cursor()
query1 = "select * from table"
query2 = "select * from table2 where Id=(%s);"

cursor.execute(query1)
result = query1.fetchall()
for row in result:
    If row.a == 2:
         cursor.execute(query2, [row.time])

В приведенном выше коде python я не могу извлечь данные, запустив query2 и передав результат query1 в качестве параметра. Кажется, что курсор заблокирован запросом 1, поэтому выполнение запроса 2 не происходит. Пожалуйста, помогите кому-нибудь в этом вопросе.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Используйте RealDictCursor и исправьте синтаксис внутреннего вызова на execute():

import psycopg2
import psycopg2.extras

conn = pgconn(------)
cursor = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
query1 = "select * from table"
query2 = "select * from table2 where Id=(%s);"

cursor.execute(query1)
result = query1.fetchall()
for row in result:
    If row.a == 2:
         cursor.execute(query2, (row['time'],))
0 голосов
/ 05 августа 2020

Прежде всего вы можете написать оператор соединения, чтобы сделать это и легко получить данные

select * from table join table2 where table2.id == table.time

Также, почему это не работает, возможно, потому что объект курсора переопределяется внутри for l oop и, таким образом, результаты запроса изменяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...