Python psycopg2 not inserting into postgresql table

前端 未结 4 1011
抹茶落季
抹茶落季 2020-12-09 01:14

I\'m using the following to try and insert a record into a postgresql database table, but it\'s not working. I don\'t get any errors, but there are no records in the table.

相关标签:
4条回答
  • 2020-12-09 01:50

    If don't want to have to commit each entry to the database, you can add the following line:

    conn.autocommit = True
    

    So your resulting code would be:

    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"
    
    0 讨论(0)
  • 2020-12-09 02:08

    Turns out I needed conn.commit() at the end

    0 讨论(0)
  • 2020-12-09 02:11

    psycopg2 is Python DB API-compliant, so the auto-commit feature is off by default. You need to call conn.commit to commit any pending transaction to the database. As connections (and cursors) are context managers, you can simply use the with statement to automatically commit/rollback a transaction on leaving the context:

    with conn, conn.cursor() as cur:  # start a transaction and create a cursor
        cur.execute(sql)
    

    From the docs:

    When a connection exits the with block, if no exception has been raised by the block, the transaction is committed. In case of exception the transaction is rolled back.

    When a cursor exits the with block it is closed, releasing any resource eventually associated with it. The state of the transaction is not affected.

    0 讨论(0)
  • 2020-12-09 02:11
    import psycopg2
    conn = psycopg2.connect("dbname='djangostack' user='bitnami' 
    host='localhost' password='password'")
    con.set_session(autocommit=True)
    
    0 讨论(0)
提交回复
热议问题