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
lzyong2019
V2EX  ›  Python

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

  •  
  •   lzyong2019 · 18 小时 45 分钟前 · 1147 次点击

    有类似推荐的项目也可。

    14 条回复    2025-01-08 15:55:48 +08:00
    encro
        1
    encro  
       18 小时 36 分钟前
    encro
        2
    encro  
       18 小时 35 分钟前
    不仅支持 async ,
    且支持如同 django 一样的模块化,
    支持模块化迁移,
    支持模块命令,
    代码提示友好。
    chaselen
        3
    chaselen  
       18 小时 35 分钟前
    @encro 这名字。。龙珠粉?
    lyhapple
        4
    lyhapple  
       18 小时 32 分钟前
    目前我用的方案是 fastapi+sqlalchemy+alembic ,习惯了之后感觉还不错。
    wryyyyyyyyyyyy
        5
    wryyyyyyyyyyyy  
       18 小时 30 分钟前
    sqlalchemy
    sqlmodel ,这个是 fastapi 开发者对 sqlalchemy + pydantic 的封装,部分情况使用起来更方便一点。
    lzyong2019
        6
    lzyong2019  
    OP
       18 小时 24 分钟前
    alembic 它貌似只会生成迁移的模版,然后 upgrade 跟 downgrade 是需要自己实现的吧 😐。还是说我使用方式出错了
    IIce
        7
    IIce  
       18 小时 20 分钟前
    @encro 这个工具不支持 mysql 吧
    TimeFlies12
        8
    TimeFlies12  
       18 小时 14 分钟前
    @lzyong2019 alembic revision --autogenerate 会根据现有 Model 和数据库自动生成 upgrade & downgrade 迁移脚本。你使用的方式不对。另外也需要注意你的 db Model 是否被加载到
    encro
        9
    encro  
       18 小时 14 分钟前
    @IIce

    好像真是啊,我现在主要用 pg 。
    niubee1
        10
    niubee1  
       17 小时 37 分钟前
    fastapi+pydantic+sqlalchemy+alembic 整个一套,搞东西还是蛮快的
    bitmin
        11
    bitmin  
       17 小时 35 分钟前
    我用 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
        12
    Gress  
       17 小时 30 分钟前
    sqlalchemy 太难用了,实体类关联查询老容易 N+1 ,还得显式指定
    TimePPT
        13
    TimePPT  
       17 小时 28 分钟前
    @bitmin
    sqlmodel demo 试了下,写起来是挺爽
    之前官方的 roadmap 里( https://github.com/fastapi/sqlmodel/issues/654 )说会加 Async tools and docs 和 Integrated migrations (using Alembic). 但好像一直没动静。
    所以我选择观望下 😂
    Jason168
        14
    Jason168  
       11 小时 51 分钟前
    我用的 tortoise-orm 还行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.