问题标签 [tortoise-orm]

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 投票
0 回答
74 浏览

python - 如何在 FastAPI 中使用 tortoise orm 插入 ManyToManyField 的数据

这是我的 HTML 表单,

我的模型就像,

如何List在 FastAPI 中获取具有类别属性的表单数据并将其提交到数据库中,并将类别字段作为 ManyToManyField 关系。

我在网上搜索了很多以找到它的解决方案,但不幸的是不能。

任何帮助将不胜感激。谢谢

0 投票
1 回答
1652 浏览

python - FastAPI + Tortoise ORM + FastAPI 用户 (Python) - 关系 - 多对多

我正在使用 FastAPI、Tortoise ORM 和 FastAPI 用户来制作 API 来学习。基本上,我从 OpenWeather API 获取城市天气数据,并使用 Tortoise ORM 存储在 SQLite 数据库中。我对 FastAPI 用户进行了身份验证。

我正在使用外键并且关系工作正常。但现在我想要一些改变(改进)。我希望每个用户都有他们的项目,并且在登录并访问端点(@router.get("/me/onlyitems/", response_model=List[schemas.Card_Pydantic]))之后,它只接收他们的项目。

它工作正常,我只收到用户项目(使用 owner_id),但我的项目表使用外部唯一 ID(项目是一个城市,每个城市都有一个唯一 ID),它是主键。但是,当另一个用户尝试添加同一个城市时,它会给出错误,因为它不能在表中包含相同的城市,即使是另一个所有者。嗯,应该是这样......但我想让其他用户访问相同的城市(他们有相同的信息,他们没有定制)。然后,我希望许多用户可以访问同一个项目(并且每个用户可以访问多个项目)。

我认为为每个用户重复项目信息(使用另一个 ID)并不理想,不同的用户访问同一个项目会更好。

我认为这将是多对多关系,但我不知道如何建立关系并使用 FastAPI 获取它。

我考虑过创建一个中间表,仅使用 UserID 和 CityID(以及一个自动增量 ID)并使用它来获取相关数据,但我不知道这是否是最好的方法或者是否可行。

我试图从 Tortoise 文档中学习,但我找不到我需要的部分或理解文档的一些复杂示例和部分。

我正在使用更新版本的包和 Python 3.9.4

好吧,让我展示一些代码:

模型.py

我试图更改我的所有者字段及其与 UserModel 的关系:

我不知道它是否正确,我无法使其工作,但问题可能出在其他地方。

我的用户端点创建一个项目:

此处使用(创建项目)的 CRUD 函数:

我的端点来获取用户拥有的项目:

我的crud函数是:

我如何更改它以获取用户需要访问的卡?我想我不能使用 owner_id 的过滤器,(好吧,如果我可以创建我的中间表,我可以,但不知道如何做并获取数据)但不知道如何建立关系将用户链接到他添加的项目,同时其他用户访问相同的项目。

这段代码工作正常(我使用的是 nuxt.js 前端),直到有一个重复的城市......

处理它的最佳方法是什么以及如何处理?

谢谢,迭戈。

0 投票
0 回答
152 浏览

python - 失败的 test_main.py::test_login_success - tortoise.exceptions.ConfigurationError:没有与模型关联的数据库

我是 Pytest 的新手,我正在尝试测试,我将错误与 db 相关联。但是配置是正确的,应用程序工作正常,但是测试脚本给出了这个错误

主文件

test_main.py

我得到的错误显示在下面

0 投票
0 回答
94 浏览

python - 如何使用 asyncpg (python) 在 postgresql 表中插入具有 ManyToMany 关系的列?

我想在一开始就说明这是一个混合 python 和 postgresql 的问题。我目前正在使用 tortoise-orm 为我处理所有与 sql 相关的东西,但今天我在插入 JSONB 字段时遇到了困难。这是我的桌子:

我想在pt_data表中插入一行,然后将该行添加到表中的datapt_info

但在执行此操作时出现错误:

idk为什么python无法解析那个dict

所以我想用原始 SQL 来做这个,因为我用 tortoise-orm 做这个,我对原始 SQL 没有太多经验,我知道基础知识,但这对我来说是先进的。

我应该在这里做什么?你能帮我写下我想在这里实现的原始 SQL 查询吗?

谢谢。

0 投票
0 回答
148 浏览

python - 如何检查一个对象是否在其多对多关系中包含某些对象?

我正在使用我认为基于 Django-ORM 的Tortoise- ORM。

假设我的数据库如下所示:

是否可以使用单一内置过滤方法查询所有成分名称为“番茄”和“洋葱”的食谱?

更新#1

我尝试过使用:
Recipe.filter(Q(ingredients__name='tomato') & Q(ingredients__name='onion'))

但它不起作用,并且从该语句生成的原始 sql 无效。

0 投票
1 回答
109 浏览

python - 如何从他的多对多关系中选择包含某些孩子的父母?

鉴于这段代码(Python & TortoiseORM)

如何查询包含 BOTH Ingredient.name="tomato" 和 Ingredient.name="onion" 的所有食谱?我相信在 Django-ORM 中,可以使用 & 运算符或 intersect 方法创建一些查询集的交集。

更新#1
这个查询有效,但在我看来有点混乱,当我想查询所有包含超过 2 种成分的食谱时,它会出现问题。

更新#2

0 投票
0 回答
81 浏览

python - python后端应用程序中的验证约定

假设我目前正在使用tortoise-ormFastAPI以及pydantic
我应该只使用请求正文的pydantic 验证,还是应该使用由tortoise-orm提供的验证器验证我将要保存在数据库中的记录?

我目前正在进行双重验证(pydantictortoise-orm),但我想知道是否需要它,或者它是否只是多余的矫枉过正。

0 投票
1 回答
219 浏览

python - 如何使用 pydantic 序列化模型的所有相关模型

设置(龟甲模型):

假设我们有一只手的 id,我们想将其所有相关的手指返回给用户。我应该如何为它创建pydantic模型,我应该如何查询所有提到的手指?

到目前为止我尝试过的(没有运气):

#1

#2

0 投票
0 回答
150 浏览

python - Tortoise ORM - 具有 Postgresql 时间字段的 Pydantic 模型

我正在尝试使用以 Postgresql 作为后端的 Tortoise ORM 创建 Pydantic 模型。我有列start_timeend_time在 Postgres 中定义为时间数据类型。我尝试了我的课程如下:

当我尝试创建记录时,我最终收到一条错误消息“tortoise.exceptions.OperationalError:查询参数 $5 的无效输入:''('str' 对象没有属性'hour')”

Tortoise 字段没有 TimeField,我什至尝试使用字段。DatetimeField 给了我“08:00:00”的无效日期时间格式

任何指向正确方向的指针都会有所帮助。提前致谢

更新:@Adrian Klaver 谢谢你的建议。我已将这些字段更改为 DatetimeField

我的输入值必须从

现在它能够正确插入值。然而,选择函数现在出现“iso8601.iso8601.ParseError: Expecting a string datetime.time(10, 0)”错误

0 投票
1 回答
115 浏览

python - 导入配置模块时出错:没有名为“app”的模块 [aerich]

我发现自己在玩 python 后端,为此我使用了 fastapitortoise-orm。但是,每次更改tortoise-orm 模型后手动更新数据库很痛苦,因此我使用了专门为此目的开发的开箱即用的 aerich 工具。但是,我在导入时遇到了问题,而且我很累,因为我不知道我做错了什么。

出于某种原因,在初始化迁移目录和 aerich 设置文件后,运行任何命令 fe
"aerich migrateaerich inspectdb" 都会抛出我在标题中输入的
错误:导入配置模块时出错:没有名为 'app' 的模块

这是我的设置

配置包初始化文件,其中包含 aerich 所需的 TORTOISE-ORM 设置
配置包初始化文件,其中包含 aerich 所需的 TORTOISE-ORM 设置

使用 aerich init -t app.config.TORTOISE_ORM 命令生成的 aerich 设置文件
使用aerich init -t app.config.TORTOISE_ORM命令生成的 aerich 设置文件