【问题标题】:psycopg2 not actually inserting datapsycopg2 实际上没有插入数据
【发布时间】:2012-11-22 20:04:57
【问题描述】:

我需要将 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行!我可能做错了什么?

Python 2.7.2+

【问题讨论】:

  • 将 GRANT ALL PRIVILEGES ON DATABASE pgdb 授予 pguser;在 hba.conf 中更改对等点以信任并没有帮助
  • 这两个都是试图解决你没有的问题。如果其中任何一个出现问题,您都会收到权限错误。

标签: python postgresql psycopg2


【解决方案1】:

你没有提交交易。

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

参见the psycopg2 FAQconnection.commit() method

【讨论】:

  • 有些答案值得 100 票赞成 - 即使在 4 年后也是如此。这是其中之一! :)
  • @rjurney 请向 psycopg2 存储库提交拉取请求,然后将其添加到 :) 在您希望在文档中找到的最合乎逻辑的位置。
  • 对于担心他们可能会一直忘记这一步的其他人:将autocommit 设置为True 用于会话:initd.org/psycopg/docs/connection.html#connection.set_session
  • faq 还应该提醒在 with() 语句或游标中使用连接之间的区别... :(
  • 回复:with() 语句:commit() 会在 with 块的末尾自动执行,假设没有发生错误。请注意,连接保持打开状态。对于那些在这里发现自己却不知道的人。 :)
【解决方案2】:

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

@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)

一切都为我工作。

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2020-02-15
    • 1970-01-01
    • 2022-11-20
    • 2014-08-18
    • 1970-01-01
    • 2021-11-16
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多