gpt4 book ai didi

python - SQLAlchemy 和显式锁定

转载 作者:太空狗 更新时间:2023-10-30 00:07:48 26 4
gpt4 key购买 nike

我有多个进程可能会向数据库中插入重复的行。这些插入不会非常频繁地发生(每小时几次),因此它对性能并不关键。

我在执行插入之前尝试了存在检查,如下所示:

#Assume we're inserting a camera object, that's a valid SQLAlchemy ORM object that inherits from declarative_base...
try:
stmt = exists().where(Camera.id == camera_id)
exists_result = session.query(Camera).with_lockmode("update").filter(stmt).first()

if exists_result is None:
session.add(Camera(...)) #Lots of parameters, just assume it works
session.commit()
except IntegrityError as e:
session.rollback()

我遇到的问题是 exist() 检查没有锁定表,因此多个进程有可能同时尝试插入同一个对象时间。在这种情况下,一个进程成功插入,而其他进程因 IntegrityError 异常而失败。虽然这有效,但我觉得它并不“干净”。

我真的很想在执行 exists() 检查之前锁定 Camera 表。

最佳答案

也许你会感兴趣:

https://groups.google.com/forum/?fromgroups=#!topic/sqlalchemy/8WLhbsp2nls

You can lock the tables by executing the SQL directly. I'm not sure what that looks like in Elixir, but in plain SA it'd be something like:

 conn = engine.connect() conn.execute("LOCK TABLES Pointer WRITE") #do stuff with conn conn.execute("UNLOCK TABLES")

关于python - SQLAlchemy 和显式锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com