fastapi 中有没有好用的 orm 工具推荐,以及 orm 是方便迁移的,可以实现像 django 的 migrate 的功能

1 天前
 lzyong2019

有类似推荐的项目也可。

1282 次点击
所在节点    Python
17 条回复
encro
1 天前
encro
1 天前
不仅支持 async ,
且支持如同 django 一样的模块化,
支持模块化迁移,
支持模块命令,
代码提示友好。
chaselen
1 天前
@encro 这名字。。龙珠粉?
lyhapple
1 天前
目前我用的方案是 fastapi+sqlalchemy+alembic ,习惯了之后感觉还不错。
wryyyyyyyyyyyy
1 天前
sqlalchemy
sqlmodel ,这个是 fastapi 开发者对 sqlalchemy + pydantic 的封装,部分情况使用起来更方便一点。
lzyong2019
1 天前
alembic 它貌似只会生成迁移的模版,然后 upgrade 跟 downgrade 是需要自己实现的吧 😐。还是说我使用方式出错了
IIce
1 天前
@encro 这个工具不支持 mysql 吧
TimeFlies12
1 天前
@lzyong2019 alembic revision --autogenerate 会根据现有 Model 和数据库自动生成 upgrade & downgrade 迁移脚本。你使用的方式不对。另外也需要注意你的 db Model 是否被加载到
encro
1 天前
@IIce

好像真是啊,我现在主要用 pg 。
niubee1
1 天前
fastapi+pydantic+sqlalchemy+alembic 整个一套,搞东西还是蛮快的
bitmin
1 天前
我用 sqlmodel ,使用 pydantic 的模型更方便

我很喜欢写起来像写 sql 的方式,只要会写 sql 就会用

写起来就是

select(func.IF(,,).label('a'), func.sum(), func.count()).select_from(A).join().outerjoin().where().group_by()

update(A).where(and_(A.id == 1, A.status == 1)).values()

delete(A).where(or_(A.status == 0, col(A.b).is_(None)))

也可以

a = await session.get(A, 1)

a.b = c

await session.commit()

或者

a = A()

session.add(a)

await session.commit()


缺点是 sqlalchemy 每次查询都会开事务,我还配置不来不开事务,曲线救国自己封装了 asyncmy 一起用
Gress
1 天前
sqlalchemy 太难用了,实体类关联查询老容易 N+1 ,还得显式指定
TimePPT
1 天前
@bitmin
sqlmodel demo 试了下,写起来是挺爽
之前官方的 roadmap 里( https://github.com/fastapi/sqlmodel/issues/654 )说会加 Async tools and docs 和 Integrated migrations (using Alembic). 但好像一直没动静。
所以我选择观望下 😂
Jason168
1 天前
我用的 tortoise-orm 还行
iorilu
9 小时 22 分钟前
sqlalchemy 标配 alembic

不过这东西上手没那么容易, 文档也不容易看明白
UN2758
4 小时 28 分钟前
emmmm ,要不看看 utilmeta ?除了 sse\websocket\stream response 和关系表创建有点问题外,其他情况下 orm 类似 django 风格也挺好用的
izoabr
1 小时 45 分钟前
最近好多人推 django-ninja ,也可以了解一下,我是习惯了 Django 的 ORM 的 filter ,用 select where 用不太习惯

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

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

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

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

© 2021 V2EX