V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · Apr 17, 2021 · 2431 views
    This topic created in 1849 days ago, the information mentioned may be changed or developed.

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

    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 replies    2021-04-17 23:31:17 +08:00
    westoy
        1
    westoy  
       Apr 17, 2021
    第一段如果是官方例子的话, 配合 sqlalchemy 用只是把 sqlalchemy 当 sql 生成器松耦合用,具体执行那块都是 databases 在做, 并没有注入 sqlalchemy db 层的业务里

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

    query = select(User)
    ```
    试试这种可行嘛
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1695 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:19 · PVG 00:19 · LAX 09:19 · JFK 12:19
    ♥ Do have faith in what you're doing.