Подтвердить что ты не робот

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"
4b9b3361

Ответ 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, он закрывается, освобождая любой ресурс, в конечном счете связанный с ним. Состояние транзакции не влияет.