54

我正在使用以下内容尝试将记录插入到 postgresql 数据库表中,但它不起作用。我没有收到任何错误,但表中没有记录。我需要提交还是什么?我正在使用与 Bitnami djangostack 一起安装的 postgresql 数据库。

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

4 回答 4

92

如果不想将每个条目提交到数据库,可以添加以下行:

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"
于 2013-08-14T16:33:21.570 回答
49

结果我conn.commit()最后需要

于 2013-08-05T22:35:49.003 回答
32

psycopg2Python DB API兼容,因此默认情况下自动提交功能处于关闭状态。您需要调用conn.commit以将任何待处理事务提交到数据库。由于连接(和游标)是上下文管理器,您可以简单地使用该with语句在离开上下文时自动提交/回滚事务:

with conn, conn.cursor() as cur:  # start a transaction and create a cursor
    cur.execute(sql)

文档

当连接退出with块时,如果块没有引发异常,则提交事务。如果出现异常,事务将回滚。

当游标退出with块时,它会关闭,释放最终与之关联的任何资源。事务的状态不受影响。

于 2017-10-16T19:22:40.200 回答
2
import psycopg2
conn = psycopg2.connect("dbname='djangostack' user='bitnami' 
host='localhost' password='password'")
con.set_session(autocommit=True)
于 2019-12-18T16:47:31.707 回答