Клиент Python Postgres, как справляться с ошибками - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь создать отдельный клиент PostgreSQL, используя модуль psycopg2. Система проста, она берет код SQL и выполняет его. Но я не смог справиться с этим, если вход неправильный синтаксис SQL или программа без кода SQL закрыта, даже если она должна быть в цикле while.

Я пробовал разные комбинации, кроме разных, другой типпока цикл контролирует. Но никогда не работал. Также я старался не использовать try, но это тоже не решало.

import psycopg2

try:
    connection = psycopg2.connect(user='postgres', password='190899', host='127.0.0.1',
                                  port='5432', database='test')
    cursor = connection.cursor()

    while(input != ""):
        sqlcode = input("Enter SQL code:")
        try:
            cursor.execute(sqlcode)
        except:
            print("Invalid SQL syntax")

        ## fatcher takes sql outputs and output boolean variable controls while loop
        ## in order to print line by line I use fetchone()
        fetcher = ""
        output = True
        while output:
            fetcher = cursor.fetchone();
            if fetcher != None:
                print(fetcher)
            else:
                output = False

except (Exception, psycopg2.Error) as error :
    print ("Error while connecting to PostgreSQL", error)

finally:
    if(connection):
        cursor.close()
        connection.close()
        print("PostgreSQL connection is closed.")

Вот так я получаю ошибки по текущему коду:

Enter SQL code:SELECT * FROM person WHERE first_name = "Samed"
Invalid SQL syntax
Error while connecting to PostgreSQL no results to fetch
PostgreSQL connection is closed.

и

Enter SQL code:DROP TABLE person
Traceback (most recent call last):
  File "app.py", line 30, in <module>
    fetcher = cursor.fetchone();
psycopg2.ProgrammingError: no results to fetch

Сообщения об ошибках меняются, когда я пробую разные коды или экземпляры, ноих пересечение в том, что они уходят из цикла while, хотя они не должны этого делать.

Примечание: я не продвинутый программист на py или sql, я просто пытаюсь научиться. Я не мог найти подобную проблему в stackoverflow, по крайней мере, с моим ограниченным знаком.

...