postgres курсор неразрешенной ссылки в python - PullRequest
0 голосов
/ 09 апреля 2020

Я буду sh, чтобы проверить, существует ли запись, а затем, если это так, я хочу прочитать записи в другой таблице. Я использую тот же курсор базы данных, которую я создал, но он показывает неразрешенную ссылку для курсора внутри блока if. Мой код:

import psycopg2

conn=psycopg2.connect(host='localhost', database='my_first_db', user='postgres', password='postgres')
curr= conn.cursor()
res=curr.execute("select EXISTS(select * from teachers where t_name='xoxo' AND pass='xoxo2020')")
if curr.fetchone()[0]==1 :
    {
        curr.execute("select * from students")
        result=curr.fetchall()
        for x in result:
            print(x)
        #print('Table exists')
    }
else:
    print("not found")
print(res)
curr.close()
conn.close()

curr во второй строке блока if показывает неразрешенную ошибку. Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Мое знакомство с psycopg2 ограничено, поэтому вам, возможно, придется скорректировать следующее. Но прямо sql это может быть выполнено одним утверждением:

select * 
  from students
 where exists (select null 
                 from teachers
                where t_name = 'xoxo'
                  and password = 'xoxo2020'
              );

Насколько я могу определить, это переводится в psycopg2 как (предмет выше):

conn=psycopg2.connect(host='localhost', database='my_first_db', user='postgres', password='postgres')
curr= conn.cursor()
curr.execute("select * from students where exists (select null from teachers where t_name='xoxo' and password='xoxo2020')")
if curr.rowcount > 0
    result=curr.fetchall()
    for x in result:
        print(x)
else:
    print("not found")

curr.close()
conn.close()

Основная идея заключается в том, чтобы при работе с sql перестать думать с точки зрения проверить A; Если он существует, тогда сделайте B; Но скорее подумайте с точки зрения do B, где A;

Другими словами, пусть один оператор sql выполняет ВСЕ работу , включая любую необходимую проверку.

0 голосов
/ 09 апреля 2020

для меня это сработало, создав функцию снаружи, для работы внутри оператора if и вызвав функцию в блоке if. и работает нормально. Хотя любые ответы на запрос приветствуются.

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