关于 sanic 框架 listener 的一个问题

2018-06-21 19:05:26 +08:00
 ltoddy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


@app.listener('before_server_start')
async def before_server_start(app, loop):
    # database config
    app.engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], echo=app.config['SQLALCHEMY_TRACK_MODIFICATIONS'])
    app.Base = declarative_base(bind=app.engine)

    Session = sessionmaker(bind=app.engine)
    app.db_session = Session()

    app.Base.metadata.create_all()

这是我的一段代码,listener('before_server_start') 在服务启动前运行, 我把 sqlalchemy 所必须的几个对象和类变成 app ( Sanic 的对象)的属性后, 当我想要在 models 中想要类似这样定义的时候:

class User(app.Base)

却报错。

也就是说,模块加载的时间在 app.listener('before_server_start')运行之前。

不知道有用 Sanic+sqlalchemy 你们怎么做的?

文档给的一个 example。

2061 次点击
所在节点    Python
5 条回复
ltoddy
2018-06-21 19:18:43 +08:00
有没有人知道怎么删帖,我想删除了,自己解决了。
cszhiyue
2018-06-21 21:05:43 +08:00
应该考虑是怎么解决的给后人一点提示
keysona
2018-06-21 21:07:04 +08:00
清空内容
转移节点至水
点击下沉

基本就可以了。
WildCat
2018-06-21 21:24:29 +08:00
说个不相关的话题,sanic 并不好用,我自己的开源项目都想换 tornado 了。
billgreen1
2018-06-22 00:18:11 +08:00
@ltoddy 最讨厌你这样的,不会的时候发帖问,自己有解决方案了就藏着掖着

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/464813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX