1
learningman 2021-08-31 20:53:15 +08:00 via Android
传统的那几个 orm,peewee 啥的在 fastapi 用都挺蛋疼的
|
2
superrichman 2021-08-31 21:00:51 +08:00
一周 4 千 star,真 NB 。
|
3
coolcatha 2021-08-31 21:24:23 +08:00 via iPhone
就感觉,这个作者挺会起名字的,fastapi sqlmodel 听起来都很厉害
|
4
mmdsun 2021-08-31 22:07:41 +08:00 via Android 6
用过 Entity Framework Core
你会发现其他 O/RM 都用不下去了。 我用过很多 ORM 库。hibernate,JPA 。Python 的,SQLalchemy,Django 都用过。没一个好用的。。 |
5
yccalculus 2021-08-31 22:20:40 +08:00
@mmdsun 试试 sqlsugar
|
7
janxin 2021-08-31 22:38:25 +08:00
SQLModel 相当于在 Pydantic 和 SQLAlchemy 之间加了一层兼容适配,其实还是可以的。不过其实我觉得直接把 SQLAlchemy 包起来比较好,现在还需要手工引入 SQLAlchemy 的相关东西
|
8
LeeReamond 2021-08-31 23:28:54 +08:00
好奇底层实现原理,因为 sqlalchemy 毕竟是同步的。所以它是以一个单线程运行 sqlalchemy,然后搞了一个异步事务中心来安排业务上的请求?然后如果我要使用 oracle 的话那 sqlalchemy 还要再把请求转发到 cxoracle 来执行。。。套娃之终极套娃啊
|
9
so1n 2021-08-31 23:35:53 +08:00
@LeeReamond sqlalchemy 把生成 sql 和执行 sql 拆分了 asyncio 的 orm 都只用到 sqlalchemy 的生成部分
|
10
so1n 2021-09-01 00:32:54 +08:00
@LeeReamond 然后最新版本的 sqlalchemy 也支持异步了
|
11
chroming 2021-09-01 00:35:29 +08:00
正好公司项目在用 fastapi 和 SQLAlchemy,尝试一下这个
|
13
qW7bo2FbzbC0 2021-09-01 09:47:26 +08:00
@mmdsun #4 NPoco 也不错,EF 我感觉有点重
|
14
mywaiting 2021-09-01 09:53:15 +08:00
RAW SQL 语句一把梭,容易理解,也不用再多学一门关于 ORM 的“方言”
|
15
Vegetable 2021-09-01 09:58:13 +08:00
@mywaiting 总有人说 sql 一把梭,我非常好奇你们写测试吗?你们测试能在 sqlite 或者 h2 之类的数据库上跑起来吗?反正用 orm 不在意这些。
|
16
sudoy 2021-09-01 10:17:45 +08:00
我刚刚准备好好学一学 SQLAlchemy 呢,就看到这个了,看起来不错的样子
|
17
micean 2021-09-01 10:29:19 +08:00
|
18
mywaiting 2021-09-01 10:44:08 +08:00
|
19
ospider 2021-09-01 11:09:15 +08:00
别开新坑了,我就关心啥时候能把 FastAPI 的 API Reference 加上……查个参数还得去 tutorial 里翻,服了
|
20
l4ever 2021-09-01 13:19:56 +08:00
初步看了一下文档, 看起来像 SQLAlchemy.
|
21
2i2Re2PLMaDnghL 2021-09-01 13:38:17 +08:00
Pydantic 和 SQLAlchemy 结合必会诞生的。
我都快自己动手了。 |
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 都不能叫 |
25
Macv1994 2021-09-01 16:11:34 +08:00
看了下,跟 SQLAlchemy 很像啊
|
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. 如果言语过激请原谅,这是看过代码之后的感想,并不是酸。 |
27
abersheeran 2021-09-03 10:58:47 +08:00 1
修复一下上面的链接: https://github.com/samuelcolvin/pydantic/issues/2678
支持楼上 frostming 的说法。另外,fastapi 的性能本就没有他宣传的好,如果还用同步代码,那就更差劲了,比 Django 还慢。而作者本人给出的样例居然是同步的,属实逗笑我了。 |