python
  • postgresql
  • psycopg2
  • 2012-12-05 127 views 34 likes 
    34

    我需要从龙卷风的Postgres插入JSON数据,所以这里是这样的测试:psycopg2不是实际插入数据

    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+

    +0

    授予数据库pgdb上的所有特权给pguser;并改变hba.conf中的信任对象并没有帮助 – juk

    +2

    这两个都试图解决您没有的问题。如果其中任何一个问题出现,您都会收到权限错误。 –

    回答

    103

    您没有提交事务。

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

    请参阅the psycopg2 FAQconnection.commit() method

    +8

    有些答案值得100票 - 即使在4年后。这是其中之一! :) –

    +3

    教程和文档没有提到这个,谢谢! – rjurney

    +0

    @rjurney请向psycopg2存储库提交一个请求,然后将其添加到:)在您希望在文档中找到的最合理的地方。 –

    相关问题