【问题标题】:SQLAlchemy(Postgres) and transactionSQLAlchemy(Postgres)和事务
【发布时间】:2010-11-20 18:51:17
【问题描述】:

我希望从表(队列)中选择、锁定(没有其他进程可以编辑此记录)并在以后更新。
我假设如果我将整个查询和更新放在一个事务中,没有其他进程可以编辑/查询相同的记录。但我不太能做到这一点。

def move(one, two):
  from settings import DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME
  from sqlalchemy.orm import sessionmaker, scoped_session
  from sqlalchemy import create_engine
  engine = create_engine('postgres://%s:%s@%s:%s/%s' % (DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME), echo = False)
  conn = engine.connect()
  tran = conn.begin()
  Session = scoped_session(sessionmaker())
  session = Session(bind=conn)
  url = session.query(URLQueue).filter(URLQueue.status == one).first()
  print "Got record: " + str(url.urlqueue_id)
  time.sleep(5)
  url.status = two
  session.merge(url)
  session.close()
  tran.commit()

move('START', 'WIP')

如果我启动 2 个进程,它们都会更新相同的记录。我不确定我是否正确创建了连接/会话/事务。有什么指点吗?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    要么使您的事务隔离级别可序列化,要么通过 query.with_lockmode('update') 获取记录以进行更新。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2014-03-23
      • 1970-01-01
      • 2013-03-24
      • 2015-07-01
      • 2022-12-03
      • 2013-01-29
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多