繁体   English   中英

psycopg2 实际上没有插入数据

[英]psycopg2 not actually inserting data

我需要将 JSON 数据从 tornado 插入到 postgres,所以这里的测试是这样的:

from psycopg2 import connect

conn = connect("user='pguser' host='localhost' dbname='pgdb' password='pgpass'")
cursor = conn.cursor()

data = '[{"id":"sdf","name":"wqe","author":"vb"}]'

for row in eval(data):
  print row
  cursor.execute("""INSERT INTO books(id,name,author) VALUES('%s','%s','%s')""" % \
        (row['id'], row['name'], row['author'])
  )

>>> cursor.execute("SELECT * FROM books")
>>> cursor.fetchall()
[('sdf', 'wqe', 'vb')]
>>> 
$> psql -d pgdb -U pguser -W
Password for user pguser: 
psql (9.1.6)
Type "help" for help.

pgdb=> select * from books;
 id | name | author 
----+------+--------
(0 rows)

正如您在 python shell 中执行select后所看到的,有一些数据,但在 psql 中有 0 行! 我可能做错了什么?

蟒蛇 2.7.2+

你没有提交交易。

Psycopg2 自动打开一个事务,您必须告诉它提交以使数据对其他会话可见。

请参阅psycopg2 常见问题解答connection.commit()方法

刚刚遇到了同样令人困惑的问题。 将选项放在一起:

正如@Craig Ringer 在 cursor.execute 之后所写的那样,您可以运行 connection.commit

cursor.execute('INSERT INTO table VALUES(DEFAULT, %s)', email)
...
connection.commit()

或连接设置自动提交后

connection = connect("user='pguser' host='localhost' dbname='pgdb' password='pgpass'")
connection.autocommit = True

或使用 set_session 设置自动提交

connection = connect("user='pguser' host='localhost' dbname='pgdb' password='pgpass'") 
connection.set_session(autocommit=True)

一切都为我工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM