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

2021-04-17 10:23:30 +08:00
 Te11UA

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

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))
1836 次点击
所在节点    Python
6 条回复
westoy
2021-04-17 10:56:23 +08:00
第一段如果是官方例子的话, 配合 sqlalchemy 用只是把 sqlalchemy 当 sql 生成器松耦合用,具体执行那块都是 databases 在做, 并没有注入 sqlalchemy db 层的业务里

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

query = select(User)
```
试试这种可行嘛

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

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

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

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

© 2021 V2EX