Как узнать, успешно ли я создал таблицу (Python, Psycopg2)? - PullRequest
6 голосов
/ 10 февраля 2012

Я просмотрел документацию, но не нашел ничего, что сообщило бы мне, если последняя команда, которую я выполнил с помощью cursor.execute ("..."), прошла успешно.

I 'Я ожидаю ответа типа «1 строка затронута».

Ответы [ 2 ]

8 голосов
/ 22 марта 2016

Это старый вопрос, но один из способов проверить успешность операции с psycopg2 - просто посмотреть на атрибут rowcount для курсора после вашего оператора.Этот атрибут возвращает количество строк, затронутых последним оператором execute.

например,

connection = psycopg2.connect(dbname="foo",user="postgres")
cur = connection.cursor()
cur.execute("INSERT INTO foo VALUES (%s, %s)", (1,2))
cur.rowcount # returns 1
cur.execute("SELECT * FROM foo")
cur.rowcount # returns 0

Аналогичный атрибут равен statusmessage, который возвращает строку, включающую тип последнегооперация выполняется вместе с количеством затронутых строк.

3 голосов
/ 10 февраля 2012

Я бы ожидал, что возникнет какое-то исключение .
Если все прошло нормально - код ошибки 00000 , и исключение не возникнет.

В случае create table вы всегда можете дважды проверить :

try:
    cur.execute("SELECT ouch FROM aargh;")
except Exception, e:
    pass

errorcodes.lookup(e.pgcode[:2])
# 'CLASS_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION'
errorcodes.lookup(e.pgcode)
# 'UNDEFINED_TABLE'
...