- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 pydantic 模型中定义多对多关系而不出现循环导入错误的正确方法是什么。我有两个文件 supplier_schema.py
和 category_schema.py
。
supplier_schema.py
from pydantic import BaseModel, HttpUrl, EmailStr
from typing import Optional, List
from datetime import datetime
from schemas.category_schema import Category
from schemas.membership_schema import Membership
class SupplierBase(BaseModel):
contact_person: str
email_address: EmailStr
company_name: str
company_email: str
company_logo: str
country: str
state_province: str
city_area: Optional[str] = None
location: str
phone: str
fax: Optional[str] = None
tagline: str
company_bio: Optional[str]
year_established: int
employees_count: str
certificates: Optional[List[str]] = None
cover_image: Optional[HttpUrl] = None
gallery: Optional[List[HttpUrl]] = None
company_license: Optional[HttpUrl] = None
company_website: Optional[HttpUrl] = None
whatsapp_number: Optional[str] = None
facebook_url: Optional[HttpUrl] = None
twitter_url: Optional[HttpUrl] = None
linkedin_url: Optional[HttpUrl] = None
pinterest_url: Optional[HttpUrl] = None
instagram_url: Optional[HttpUrl] = None
youtube_url: Optional[HttpUrl] = None
annual_revenue: Optional[str] = None
challenges: List[str]
status: str = None
class Config:
orm_mode = True
class SupplierCreate(SupplierBase):
password: str
membership_id: int
categories_id: Optional[List[int]] = []
class Supplier(SupplierBase):
id: int
created_at: datetime
updated_at: datetime
membership: Membership
categories: List[Category]
category_schema.py
from pydantic import BaseModel, HttpUrl, EmailStr
from typing import Optional, List
from datetime import datetime
from schemas.category_schema import Category
from schemas.membership_schema import Membership
class SupplierBase(BaseModel):
contact_person: str
email_address: EmailStr
company_name: str
company_email: str
company_logo: str
country: str
state_province: str
city_area: Optional[str] = None
location: str
phone: str
fax: Optional[str] = None
tagline: str
company_bio: Optional[str]
year_established: int
employees_count: str
certificates: Optional[List[str]] = None
cover_image: Optional[HttpUrl] = None
gallery: Optional[List[HttpUrl]] = None
company_license: Optional[HttpUrl] = None
company_website: Optional[HttpUrl] = None
whatsapp_number: Optional[str] = None
facebook_url: Optional[HttpUrl] = None
twitter_url: Optional[HttpUrl] = None
linkedin_url: Optional[HttpUrl] = None
pinterest_url: Optional[HttpUrl] = None
instagram_url: Optional[HttpUrl] = None
youtube_url: Optional[HttpUrl] = None
annual_revenue: Optional[str] = None
challenges: List[str]
status: str = None
class Config:
orm_mode = True
class SupplierCreate(SupplierBase):
password: str
membership_id: int
categories_id: Optional[List[int]] = []
class Supplier(SupplierBase):
id: int
created_at: datetime
updated_at: datetime
membership: Membership
categories: List[Category]
但是我得到这个错误
Traceback (most recent call last):
File "/usr/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/usr/lib/python3.9/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/subprocess.py", line 61, in subprocess_started
target(sockets=sockets)
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/server.py", line 49, in run
loop.run_until_complete(self.serve(sockets=sockets))
File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/server.py", line 56, in serve
config.load()
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/config.py", line 308, in load
self.loaded_app = import_from_string(self.app)
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/importer.py", line 23, in import_from_string
raise exc from None
File "/home/phat/projects/crdle2-api/venv/lib/python3.9/site-packages/uvicorn/importer.py", line 20, in import_from_string
module = importlib.import_module(module_str)
File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/home/phat/projects/crdle2-api/./main.py", line 3, in <module>
from routers import supplier_router, membership_router, category_router
File "/home/phat/projects/crdle2-api/./routers/supplier_router.py", line 4, in <module>
from schemas.supplier_schema import Supplier, SupplierCreate
File "/home/phat/projects/crdle2-api/./schemas/supplier_schema.py", line 4, in <module>
from schemas.category_schema import Category
File "/home/phat/projects/crdle2-api/./schemas/category_schema.py", line 4, in <module>
from schemas.supplier_schema import Supplier
ImportError: cannot import name 'Supplier' from partially initialized module 'schemas.supplier_schema' (most likely due to a circular import) (/home/phat/projects/crdle2-api/./schemas/supplier_schema.py)
我做错了什么?我该如何解决这个问题?
最佳答案
此导入错误是由于以下过程造成的:
supplier_schema.py
已定义supplier_schema
模块从 schemas.category_schema
Category
schemas.category_schema
尚未定义,现在执行。category_schema
需要从 supplier_schema
导入 Supplier
。supplier_schema
无法在不从 category_schema
导入的情况下继续执行,反之亦然。I'll be addressing this specific case.
For more general use cases, read: Circular import dependency in Python
选项 1:将所有内容组合到一个模块中。
选项 2:在根模块的初始化中导入模型并更改导入语言:
执行方法如下:
确保您的 schemas
模块包含一个 init
文件:
-- schemas
|-- __init__.py
|-- category_schema.py
|-- membership_schema.py
您的 __init__.py
文件应包含以下内容:
from . import category_schema
from . import membership_schema
现在,您的导入应修改为以下内容:
# Old way: ⬇
# from schemas.category_schema import Category
# New way: ⬇
import schemas
...
class Supplier(SupplierBase):
categories: List[schemas.category_schema.Category]
...
重复其他子模块和导入。
循环导入是使用 ORM 时非常常见的错误。遇到一个意味着您已经大大扩展了应用程序的属性——恭喜!根据您的目标为您的项目选择最佳解决方案。
关于python - 定义 Fastapi Pydantic 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69042316/
我正在研究最适合我的 Web 框架。 我们将开发几个微服务,我们需要在一些微服务上分派(dispatch)事件,这些事件可以在其他微服务上监听。 是否支持使用 FastAPI?如果没有,有没有办法监听
快速API 0.68.0 python 3.8 from fastapi import Depends, FastAPI, Header, HTTPException async def verify
在 FastAPI 框架内: 虽然请求数据当然可以作为参数传递,但我想知道函数是否可以在不传递参数的情况下访问有关当前请求的信息。 免责声明:我不认为全局访问请求数据是一个好的做法,但我有一个用例,如
无论如何,FastAPI“依赖项”是否可以解释路径参数。 我有很多形式的功能: @app.post("/item/{item_id}/process", response_class=ProcessR
我有一个由诗歌构建的 fastapi 项目。我想使用 pyproject.tom 中的脚本部分运行应用程序,如下所示: poetry run start 该部分的双引号内是什么? [tool.poet
我正在尝试将分页添加到我的 fastapi 项目中。所以我决定使用这个: fastapi-contrib 我在那里遵循相同的示例,但由于某种原因我收到此错误: type object 'MOrdene
在我的项目文件夹中,我有一个基本的 index.html文件加上静态文件(js、css)以及我的 main.py : from fastapi.staticfiles import StaticFil
FastAPI显示可以设置response_model_exclude_none=True在装饰器中忽略值为 None 的字段:https://fastapi.tiangolo.com/tutoria
FastAPI 生成自动 swagger/openapi 文档。 在 https://fastapi.tiangolo.com/tutorial/response-status-code 的教程中有一
我获得了使用FastApi运行推理服务器的以下代码。在大约8小时内,我的RAM内存增加了4Gi。。更有趣的是,当我停止我的容器时,内存并没有清理干净。。例如,在运行Docker Container之前
今天的文章分享如下在 FastAPI 框架下,使用 pytest 来自动化测试数据库相关的接口,文章的最后给出全部代码。 最近越来越喜欢使用 FastAPI 来写后端服务了,因为它是 Pyth
Docker 学习 https://www.cnblogs.com/poloyy/p/15257059.html 项目结构 .├── app│ ├── __init__.py│ └
下面代码来自官方FastAPI tutorials page ,我无法理解这些语句(例如,name: str)。 from typing import Optional from fastapi im
我是网络通信的新手。我使用 ubuntu 并尝试学习 fastapi。但是,我认为很难理解如何格式化我打算发送回客户端的响应。 要发回的响应的规则是什么?如果您想发回自定义答案 - 例如两个图像文件
我正在尝试从文件中添加路由,但我事先并不知道实际的参数,因此我需要一个通用函数来通过 **kwargs 处理参数。 要添加路由,我正在使用 add_api_route,如下所示: from fasta
我按照此文档设置了一个用户: https://fastapi.tiangolo.com/advanced/security/http-basic-auth/ 但我只收到一个端点“/users/me”的
当我尝试从我的 postgre 数据库中获取一些数据并使用 fastapi 时出现此错误。 我不知道为什么会这样......但这是我的代码,谢谢你的帮助。 路线 @router.get("/fuent
我有一个与在 pycharm 中使用 uvicorn 的 FastAPI 有关的问题。我的项目具有以下结构: LearningPy | |-- apis -----|--modelser
我已经创建了一个登录路径,我在其中发布了我的表单数据并设置了一个 cookie。设置 cookie 后,我重定向到“/main”,在那里我得到 {detail:"Method Not Allowed"
当我使用 FastAPI 时,如何为网络服务指定基本路径? 换句话说 - FastAPI 对象是否有参数可以将端点和我定义的任何其他对象设置为不同的根路径? 例如,如果我的代码带有下面的虚假参数 ro
我是一名优秀的程序员,十分优秀!