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