Python psycopg2 не вставляется в таблицу postgresql
Я использую следующее, чтобы попытаться вставить запись в таблицу базы данных postgresql, но она не работает. Я не получаю никаких ошибок, но в таблице нет записей. Мне нужна фиксация или что-то еще? Я использую базу данных postgresql, которая была установлена с установкой djangostack Bitnami.
import psycopg2
try:
conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'")
except:
print "Cannot connect to db"
cur = conn.cursor()
try:
cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
print "Cannot insert"
Ответы
Ответ 1
Если вы не хотите фиксировать каждую запись в базе данных, вы можете добавить следующую строку:
conn.autocommit = True
Таким образом, ваш результирующий код будет выглядеть следующим образом:
import psycopg2
try:
conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'")
conn.autocommit = True
except:
print "Cannot connect to db"
cur = conn.cursor()
try:
cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
print "Cannot insert"
Ответ 2
Оказывается, мне нужно conn.commit()
в конце
Ответ 3
psycopg2
API-интерфейс Python - совместим, поэтому функция автоматической фиксации по умолчанию отключена. Вам необходимо вызвать conn.commit
для фиксации любой ожидающей транзакции в базе данных. Поскольку соединения (и курсоры) являются менеджерами контекста, вы можете просто использовать оператор with
для автоматического фиксации транзакции при отказе от транзакции:
with conn, conn.cursor() as cur: # start a transaction and create a cursor
cur.execute(sql)
Из docs:
Когда соединение выходит из блока with
, если исключение не было поднятый блоком, транзакция совершена. В случае исключение откат транзакции.
Когда курсор выходит из блока with
, он закрывается, освобождая любой ресурс, в конечном счете связанный с ним. Состояние транзакции не влияет.