首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQLAlchemy RoutingSession.get_bind中进行with_lockmode(主查询)的判断

问如何在SQLAlchemy RoutingSession.get_bind中进行with_lockmode(主查询)的判断
EN

Stack Overflow用户
提问于 2012-09-27 10:14:52
回答 1查看 525关注 0票数 0

我想从mysql数据库中获得一行,然后修改一些字段并提交。在我提交之前,应该禁止更新这一行。所以我使用with_lockmode('update').我使用下面的RoutingSession,并发现它使用从来执行这个查询。但是我想使用主进行这个查询,我应该在get_bind中做什么?

代码语言:javascript
复制
class RoutingSession(Session):
    def get_bind(self, mapper=None, clause=None):
        if self._flushing:

            return engines['master']
        else:
            return engines['slave']

row = session.query(SomeTable).filter(SomeTable.id = 1).with_lockmode('update').one
row.somefield = 'newcontent'
session.commit()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 15:07:20

我想你是从我在SQLAlchemy中的Django型数据库路由器的博文中得到这个食谱的。如果您查看“手动访问”一节,您将看到需要将路由会话显式地指向某个节点的方法:

代码语言:javascript
复制
class RoutingSession(Session):

    def get_bind(self, mapper=None, clause=None ):
        if self._name:
            return engines[self._name]
        elif mapper and issubclass(mapper.class_, OtherBase):
            return engines['other']
        elif self._flushing:
            return engines['master']
        else:
            return engines[
                    random.choice(['slave1','slave2'])
                ]

    _name = None
    def using_bind(self, name):
        s = RoutingSession()
        vars(s).update(vars(self))
        s._name = name
        return s

然后,您只需显式地使用该绑定执行操作:

代码语言:javascript
复制
m1 = Session().using_bind("master").query(Model1).first()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12619041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档