SQLModel - V2EX
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
Livid
179.91D
603.7D
V2EX    Python

SQLModel

  •  2
     
  •   Livid
    PRO
    2021-08-31 17:50:17 +08:00 6573 次点击
    这是一个创建于 1558 天前的主题,其中的信息可能已经有所发展或是发生改变。
    27 条回复    2021-09-03 10:58:47 +08:00
    learningman
        1
    learningman  
       2021-08-31 20:53:15 +08:00 via Android
    传统的那几个 orm,peewee 啥的在 fastapi 用都挺蛋疼的
    superrichman
        2
    superrichman  
       2021-08-31 21:00:51 +08:00
    一周 4 千 star,真 NB 。
    coolcatha
        3
    coolcatha  
       2021-08-31 21:24:23 +08:00 via iPhone
    就感觉,这个作者挺会起名字的,fastapi sqlmodel 听起来都很厉害
    mmdsun
        4
    mmdsun  
       2021-08-31 22:07:41 +08:00 via Android   6
    用过 Entity Framework Core
    你会发现其他 O/RM 都用不下去了。

    我用过很多 ORM 库。hibernate,JPA 。Python 的,SQLalchemy,Django 都用过。没一个好用的。。
    yccalculus
        5
    yccalculus  
       2021-08-31 22:20:40 +08:00
    @mmdsun 试试 sqlsugar
    janxin
        6
    janxin  
       2021-08-31 22:34:55 +08:00
    @mmdsun 要么试试 Python 的 Pony
    janxin
        7
    janxin  
       2021-08-31 22:38:25 +08:00
    SQLModel 相当于在 Pydantic 和 SQLAlchemy 之间加了一层兼容适配,其实还是可以的。不过其实我觉得直接把 SQLAlchemy 包起来比较好,现在还需要手工引入 SQLAlchemy 的相关东西
    LeeReamond
        8
    LeeReamond  
       2021-08-31 23:28:54 +08:00
    好奇底层实现原理,因为 sqlalchemy 毕竟是同步的。所以它是以一个单线程运行 sqlalchemy,然后搞了一个异步事务中心来安排业务上的请求?然后如果我要使用 oracle 的话那 sqlalchemy 还要再把请求转发到 cxoracle 来执行。。。套娃之终极套娃啊
    so1n
        9
    so1n  
       2021-08-31 23:35:53 +08:00
    @LeeReamond sqlalchemy 把生成 sql 和执行 sql 拆分了 asyncio 的 orm 都只用到 sqlalchemy 的生成部分
    so1n
        10
    so1n  
       2021-09-01 00:32:54 +08:00
    @LeeReamond 然后最新版本的 sqlalchemy 也支持异步了
    chroming
        11
    chroming  
       2021-09-01 00:35:29 +08:00
    正好公司项目在用 fastapi 和 SQLAlchemy,尝试一下这个
    coolcatha
        12
    coolcatha  
       2021-09-01 09:09:18 +08:00
    @mmdsun 我感觉 Django 的很不错了啊!能说说这些大概有哪些问题吗?
    qW7bo2FbzbC0
        13
    qW7bo2FbzbC0  
       2021-09-01 09:47:26 +08:00
    @mmdsun #4 NPoco 也不错,EF 我感觉有点重
    mywaiting
        14
    mywaiting  
       2021-09-01 09:53:15 +08:00
    RAW SQL 语句一把梭,容易理解,也不用再多学一门关于 ORM 的“方言”
    Vegetable
        15
    Vegetable  
       2021-09-01 09:58:13 +08:00
    @mywaiting 总有人说 sql 一把梭,我非常好奇你们写测试吗?你们测试能在 sqlite 或者 h2 之类的数据库上跑起来吗?反正用 orm 不在意这些。
    sudoy
        16
    sudoy  
       2021-09-01 10:17:45 +08:00
    我刚刚准备好好学一学 SQLAlchemy 呢,就看到这个了,看起来不错的样子
    micean
        17
    micean  
       2021-09-01 10:29:19 +08:00
    @Vegetable

    orm 能写 merge into/insert ignore/insert on conflict/with as/select from partition 吗?
    mywaiting
        18
    mywaiting  
       2021-09-01 10:44:08 +08:00
    @Vegetable 测试有写的,在对应的数据库写入测试数据简单测试即可

    在数据表结构确定的情况下,SQL 语句是一目了然的,无论是写测试用例还是后期维护都相当简单
    4BVL25L90W260T9U
        19
    4BVL25L90W260T9U  
       2021-09-01 11:09:15 +08:00
    别开新坑了,我就关心啥时候能把 FastAPI 的 API Reference 加上……查个参数还得去 tutorial 里翻,服了
    luckyc
        20
    luckyc  
       2021-09-01 13:19:56 +08:00
    初步看了一下文档, 看起来像 SQLAlchemy.
    2i2Re2PLMaDnghL
        21
    2i2Re2PLMaDnghL  
       2021-09-01 13:38:17 +08:00
    Pydantic 和 SQLAlchemy 结合必会诞生的。
    我都快自己动手了。
    Rwing
        22
    Rwing  
       2021-09-01 14:09:42 +08:00   4
    还有很多人没明白 ORM 与 db helper 或者叫 db tool 的区别。
    ORM 里很重要的一点是关系映射 Relational Mapping,如何让 db 中的数据以 object 的形式存在。

    举个应该是 ORM 基础功能的简单的例子来说:
    var zhangsan = new Student("张三");
    var lisi = new Teacher("李四");
    zhangsan.Teacher = lisi ;
    db.Save(zhangsan);
    这时数据库中应该创建了叫张三的学生以及李四的老师,并且张三的老师外键 id 是李四的 id

    如果连这个都没法处理,那连 ORM 都不能叫
    Macv1994
        25
    Macv1994  
       2021-09-01 16:11:34 +08:00
    看了下,跟 SQLAlchemy 很像啊
    frostming
        26
    frostming  
       2021-09-03 10:46:04 +08:00   3
    都闪开,让我吐槽

    1. 不是像 SQLAlchemy (简称 SQLA ),根本就是包了一下 SQLAlchemy,大家不要觉得 ORM 很高大上,现在新出的 python ORM 无一例外都是 SQLA 套壳,这个 SQLModel 更过分,里面除了 main.py 是和 pydantic 互通的部分,其他都是 import SQLA 的类加上泛型标注又放出去的(大家看过代码就知道我没有乱说)
    2. 所以这个只能叫做「 SQLA 的扩展」不能叫做一个新的 ORM,该起名叫「 sqla-pydantic 」但那样怎么营销?
    3. 作者擅长营销和文档,他在文档里放了一个 tutorial,居然是教你如何用 ORM CRUD,这个就是更初学者友好的 SQLA 文档啊,ORM 哪个核心功能是他写的呢?不要说 SQLA 文档看不懂,其实已经有很大进步了。
    4. sqla-pydantic 的连接确实在 fastapi 里非常需要,但我相信之前也有很多人自己做过,不是很难。
    5. 还记得 pydantic 被 PEP 563 坑的事情吗? https://github.com/samuelcolvin/pydantic/issues/2678,这个如果没解决好,任何在 Pydantic 之上的库全得废
    6. SQLA 是支持异步的,但作者在文档里最重要的 quick start 例子里居然用的同步。
    7. 如果言语过激请原谅,这是看过代码之后的感想,并不是酸。
    abersheeran
        27
    abersheeran  
       2021-09-03 10:58:47 +08:00   1
    修复一下上面的链接: https://github.com/samuelcolvin/pydantic/issues/2678

    支持楼上 frostming 的说法。另外,fastapi 的性能本就没有他宣传的好,如果还用同步代码,那就更差劲了,比 Django 还慢。而作者本人给出的样例居然是同步的,属实逗笑我了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     840 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:02 PVG 06:02 LAX 14:02 JFK 17:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86