V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Te11UA
V2EX  ›  Python

异步 MySQL 库 databases 的 Table 结构怎么从经典模式转成 ORM?

  •  
  •   Te11UA · 2021-04-17 10:23:30 +08:00 · 1672 次点击
    这是一个创建于 1098 天前的主题,其中的信息可能已经有所发展或是发生改变。

    翻了很多例子都是使用的经典模式,实在不习惯:

    import databases
    database = databases.Database(DATABASE_URL)
    metadata = sqlalchemy.MetaData()
    notes = sqlalchemy.Table(
        "notes",
        metadata,
        sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
        sqlalchemy.Column("text", sqlalchemy.String),
        sqlalchemy.Column("completed", sqlalchemy.Boolean),
    )
    engine = sqlalchemy.create_engine(
        DATABASE_URL, connect_args={"check_same_thread": False}
    )
    metadata.create_all(engine)
    await database.connect()
    query = notes.select()
    return await database.fetch_all(query)
    

    请问怎么转成这种 ORM 模式,进行数据库操作呢?

    from db.base_class import Base
    class User(Base):
        user_id = Column(String(32), primary_key=True, index=True)
        name = Column(String(32))
    
    6 条回复    2021-04-17 23:31:17 +08:00
    westoy
        1
    westoy  
       2021-04-17 10:56:23 +08:00
    第一段如果是官方例子的话, 配合 sqlalchemy 用只是把 sqlalchemy 当 sql 生成器松耦合用,具体执行那块都是 databases 在做, 并没有注入 sqlalchemy db 层的业务里

    那么第二段应该是做不到的
    Te11UA
        2
    Te11UA  
    OP
       2021-04-17 11:10:55 +08:00
    @westoy #1 感谢 我明白了!看了官方已经有 https://github.com/encode/orm 类似的 ORM 库了,但是有点久了……
    mimzy
        3
    mimzy  
       2021-04-17 11:15:50 +08:00
    不用 databases,用 Tortoise,还可以 https://github.com/tortoise/tortoise-orm/
    foil2
        4
    foil2  
       2021-04-17 14:15:48 +08:00
    现在就在等 Sqlalchemy 官方支持 async
    dongxiao
        6
    dongxiao  
       2021-04-17 23:31:17 +08:00
    ``` python
    from sqlalchemy import select

    query = select(User)
    ```
    试试这种可行嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2640 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:57 · PVG 09:57 · LAX 18:57 · JFK 21:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.