问题标签 [sqlmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1339 浏览

sqlalchemy - 如何让 Alembic 识别 SQLModel 数据库模型?

使用SQLModel如何让 alembic 识别以下模型?

我一直在研究的一种方法是为 Alembic 导入 SQLalchemy 模型,但查看源代码我找不到如何做到这一点。

如何使 Alembic 与 SQLModel 模型一起工作?

0 投票
1 回答
254 浏览

python - SQLModel - 如何仅使用基本模型中的几个字段

在下面给出的示例中:https ://sqlmodel.tiangolo.com/tutorial/create-db-and-table/

如何创建仅使用并忽略其他变量/行的name模式age

0 投票
0 回答
383 浏览

python - 我们如何在 sqlmodel 中迁移数据库?

我使用创建表SQLModel.metadata.create_all(engine),当我将状态类型更改为str并再次运行该create_all()方法时,状态类型在数据库中没有改变。有没有办法像 Django 或 flask-migrate 那样迁移数据库?

0 投票
0 回答
125 浏览

python - 是否可以继承 Python 类型注解?

我正在学习Sebastian Ramirez(FastAPI创建者)的一个名为SQLModel的新工具。

对于 SQLModel 中的基本 CRUD 操作,文档告诉您必须像这样设置模型实体:

我上面的示例将创建一个名为 的模型Room,它是House. 对于每个新模型类都必须重复此操作,这意味着我可以忘记将多个模型放在同一个文件中。

有很多代码用于一点点 CRUD,对吧!?

因为很可能我会在 90% 的时间里使用相同的 CRUD 设置(例如,我总是希望所有字段在更新时都是可编辑的,或者我总是只需要 ID 来读取,等等),它得到了我想知道是否可以抽象上述内容,以便不必为每个数据库实体重复整个文件。

在 Python 中是否可以通过继承或其他方式传递字段和类型,这样我只需要编写一次上述代码的通用版本,而不必为每个模型都写出来?

0 投票
1 回答
310 浏览

sqlalchemy - 无法通过 SQLModel 将 FastAPI List[]、Set() 映射到 Postgres

我正在使用 FastAPI 做我的个人投资组合 API,决定尝试SQLModel。它感觉很直观,到目前为止我很喜欢它,但是我遇到了一个我已经挣扎了好几天的问题,试图了解如何让它正确。

我有一个项目模型:

FastAPI 工作正常,我检查了 localhost:8000/docs并正确进行类型验证:

当我使用上述查询发出 POST 请求时,出现内部服务器错误

不幸的是,SQLModel 在设计上会在创建表时将任何奇怪的类型转换为 VARCHAR,从而无法使用 List 或 Set 功能:

我知道 postgres 有一些数组类型,比如:integer[]text[]可以处理类别和图像字段的这种情况。尝试手动更改具有相同结果的表列类型。

试图将类别和图像发布为 str:

无法使用如此惊人的功能来清理我收到的数据,这将是非常可悲的。我在互联网上查看并找不到任何相关内容或使用 List 和 Set 和 SQLModel 的示例

¿ 我可以做些什么来支持这种情况?

PD:我也在使用 asyncpg

0 投票
1 回答
64 浏览

mysql - SQLmodel 和 group_by

我最近完成了 SQLmodel 文档,但它没有告诉我如何使用 group_by 命令。我正在尝试以下操作:

在 SQLmodel 代码中使用。

这是我的代码。如何使用 group_by "reader_id" 条件?

0 投票
0 回答
259 浏览

fastapi - Fastapi 和 SQLModel:如何从 POST 中的请求负载中提取和创建多对多类

我想我已经制定了 SQLModel 类(Alembic 确实成功创建了所有表),但我不确定从 POST 端点中的请求数据填充它们的正确方法是什么。

我有一个如下所示的请求有效负载:

为了将其存储在数据库中,我需要使用三个模型——国家、货币和时区

我为多对多关系定义了这些模型(加上两个关联表)

但我的问题是如何处理 POST 请求并创建类和关系。

我试过这个:

我希望from_orm可能已经处理了它,但它看起来不像。我不确定我是否应该采取天真的方法并手动创建它们?或者也许我需要重组我的课程?或者也许有推荐的方法来解决这个问题?

任何帮助表示赞赏!

更新

我试过天真地创造它

但是最后一行导致了这个错误 'CurrencyBase' object has no attribute '_sa_instance_state'

0 投票
1 回答
209 浏览

python - Python SQLModel - 截断表或全部删除并获取行数

使用 Python SQLModel,我想以最标准的 SQLModel 方式截断表,或删除所有行,并获取删除的行数。我怎样才能做到这一点?我正在使用这个:

但它引发了一个错误:

我也尝试过scalar()fetchone()而不是fetchall()没有成功。

0 投票
1 回答
192 浏览

python - 使用 sqlmodel 的 alembic 迁移尝试更改主键列

鉴于此模型:

我使用创建初始 alembic 修订alembic revision --autogenerate -m "init",然后使用alembic upgrade head.

现在我取消注释该label字段,然后运行alembic revision --autogenerate -m "label"​​. 我的迁移显示如下:

为什么 alembic 试图更改 id 字段?我们正在尝试评估 sqlmodel/alembic 以查看它对于生产工作负载是否可行,并且必须手动进行迁移以摆脱这些主键操作对我来说似乎有点危险。我做错了什么让alembic想以这种方式编辑我的主键字段吗?

编辑:为了披露,模型来自这篇文章/示例:https ://github.com/testdrivenio/fastapi-sqlmodel-alembic

0 投票
0 回答
235 浏览

python - how to use Enum types with SqlModel, and alembic

I'm trying to find a way to get SqlModel and Alembic play nice together. My goal is to not have to hand-edit the auto-generated alembic migrations.

Here's my model class:

After creating the initial migration etc, I add my enum. This is the closest I've come to something that works, after digging thru https://github.com/tiangolo/sqlmodel/issues?q=is%3Aissue+is%3Aopen+enum :

The generated alembic migration from adding the song_type field looks like this:

From what I can see this resembles the documentation I've found on how to make sqlalchemy and alembic work with migrations. However, when I attempt to apply this to my database, it fails:

Relevant parts of my package dependency tree:

I know that I can hand-edit my migration to look something like this:

...but my goal is to see if I can make alembic correctly autogenerate the migration - especially since the error doesn't occur until I attempt to apply the migration I hope to be able to make this safer.

I'd be very interested in any pointers on how to make this work