我正在尝试通过python中的 psycopg2 在Postgres中插入/更新行。
插入/更新将以下列方式发生:
对于我的情况,可能会在同一行上触发多次更新。为了解决这个问题,我使用 FOR UPDATE 来锁定行。
我找不到调用Update查询的正确方法,以便:
更新查询由不同的线程独立触发。
FOR UPDATE 是否足以处理上述情况? 以下是我想要做的事情:
try:
conn.autocommit = True
cur = conn.cursor()
command = '''INSERT INTO table (column1, column2) VALUES ('A','B')'''
cur.execute(command)
except psycopg2.IntegrityError as e:
try:
lock_row = '''SELECT * FROM table where column1='A' FOR UPDATE'''
cur.execute(lock_row)
command = '''UPDATE table SET column2='C' WHERE column1='A' '''
cur.execute(command)
updated_rows = cur.rowcount
except Exception as e:
print(e)
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
另外,我应该使用autocommit
还是使用BEGIN.SELECT.UPDATE.COMMIT
?
我是postgres的新手,所以我上面可能做了很多错事,如果还有什么我应该纠正,请告诉我。