python
  • postgresql
  • psycopg2
  • 2012-12-05 66 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存儲庫提交一個請求,然後將其添加到:)在您希望在文檔中找到的最合理的地方。 –

    相關問題