【问题标题】:How to write an helper class with sqlalchemy如何使用 sqlalchemy 编写辅助类
【发布时间】:2015-06-22 14:02:04
【问题描述】:

我使用 google-appengine 作为我的生产环境,它与 mysql 服务器保持 12 个 mysqldb+mysql:// 连接,超过 12 个连接显示套接字打开失败。

我想要的是,编写一个简单的 crud 包装器。 目前,

class CRUDHelper(object):

    _instance = None
    _engine = None
    _session = None

    def __new__(cls, *args, **kwargs):

        if cls._instance:
            print "Reusing instance"
            return cls._instance
        cls._instance = super(CRUDHelper, cls).__new__(cls, *args, **kwargs)
        return cls._instance


    def __init__(self):


        if not CRUDHelper._engine:
            CRUDHelper._engine = create_engine("mysqldb+mysql://test@/test?unix_socket=/cloudsql/appid:appname")
            CRUDHelper._engine.echo = True

        self.engine = CRUDHelper._engine
        if not CRUDHelper._session:
            CRUDHelper._session = scoped_session(sessionmaker(autoflush = True, bind=self.engine))

        self.sessionn = CRUDHelper._session
        Base.metadata.create_all(bind= self.engine)


    def get(self, model, id):

        session = self.session()
        # Developer is an sqlalchemy model
        dev = session.query(model).filter_by(id=id).one()
        session.close()
        return dev

    def save(self, object, merge=False):

        self.session.flush()
        if not merge:
            self.session.add(object)
        else:
            self.session.merge(object)
        self.session.commit()

这是我的粗包装。上面的代码是可扩展的,并且不会超出我想要的 12 个连接。

但问题是。

考虑一个 id = 1 的开发者实体 name= "bob" 并且年龄 = 23

crud = CRUDHelper()
dev = curd.get(Developer, 1)
print dev.age
dev.age += 1
crud.save(dev, merge=True)

假设我运行上面的 sn-p 代码两次。预期是 23 和 24,但我只得到 23 和 23。

所以任何人都可以建议我这里做错了什么,或者给我一个更好的包装器,有 12 个连接上限。

【问题讨论】:

    标签: python mysql google-app-engine sqlalchemy


    【解决方案1】:

    我发现答案是我的 create_engine 函数有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-02
      • 2021-05-20
      • 2015-08-12
      • 2019-08-24
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      相关资源
      最近更新 更多