12

psycopg2 を使用して Python で PostgreSQL に接続していますが、接続プールを使用したいと考えています。

INSERT クエリを実行するときに commit() と rollback() の代わりに何をすべきかわかりません。

db = pool.SimpleConnectionPool(1, 10,host=conf_hostname,database=conf_dbname,user=conf_dbuser,password=conf_dbpass,port=conf_dbport)


# Get Cursor
@contextmanager
def get_cursor():
    con = db.getconn()
    try:
        yield con.cursor()
    finally:
        db.putconn(con)


with get_cursor() as cursor:
    cursor.execute("INSERT INTO table (fields) VALUES (values) RETURNING id") 
    id = cursor.fetchone()

commit() なしでは、挿入されたレコードの ID を取得できません。

4

3 に答える 3

12

更新 コードをテストすることはできませんが、いくつかのアイデアを提供します:データベースではなく接続でコミットを行います

# Get Cursor
@contextmanager
def get_cursor():
    con = db.getconn()
    try:
        yield con
    finally:
        db.putconn(con)

with get_cursor() as cursor:
    con.cursor.execute("INSERT INTO table (fields) VALUES (values) RETURNING id") 
    con.commit()
    id = cursor.fetchone()

また

# Get Cursor
@contextmanager
def get_cursor():
    con = db.getconn()
    try:
        yield con.cursor()
        con.commit()
    finally:
        db.putconn(con)


with get_cursor() as cursor:
    con.cursor.execute("INSERT INTO table (fields) VALUES (values) RETURNING id") 
    id = cursor.fetchone()

データベースへの新しい接続の作成にはコストがかかる可能性があり、コミットやロールバックを回避できないため、接続プールが存在します。したがって、問題なくデータをコミットできます。データをコミットしても接続は破壊されません。

于 2015-04-14T11:28:47.780 に答える