Python psycopg2没有插入postgresql表

时间:2013-08-05 22:31:53

标签: python postgresql insert psycopg2

我正在使用以下内容尝试将记录插入到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 个答案:

答案 0 :(得分:55)

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

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"

答案 1 :(得分:32)

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

答案 2 :(得分:7)

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

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

来自docs

  

当连接退出with块时,如果没有例外   由块提出,交易被提交。的情况下   事务被回滚的异常。

     

当光标退出with块时,它会关闭,释放任何一个   最终与之相关的资源。交易的状态   没有受到影响。

答案 3 :(得分:0)

import psycopg2
conn = psycopg2.connect("dbname='djangostack' user='bitnami' 
host='localhost' password='password'")
con.set_session(autocommit=True)