gpt4 book ai didi

python - 如何使用 sqlalchemy 编写帮助器类

转载 作者:行者123 更新时间:2023-11-29 12:09:10 25 4
gpt4 key购买 nike

我使用 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 的开发者实体,名称 =“bob”,年龄 = 23

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

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

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

最佳答案

我找到了答案,这是我的 create_engine 函数的问题。

关于python - 如何使用 sqlalchemy 编写帮助器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30981928/

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