我正在使用FastAPI制作我的个人投资组合 API ,并决定尝试SQLModel。它感觉非常直观,到目前为止我很喜欢它,但我遇到了一个问题,我已经挣扎了好几天,试图了解如何解决它。
\n我有一个项目模型:
\nfrom datetime import datetime\nfrom typing import List, Optional, Set\nfrom sqlmodel import SQLModel, Field\n\n\nclass ProjectBase(SQLModel):\n name: Optional[str]\n summary: Optional[str]\n description: Optional[str]\n category: Set[str] = ()\n award: Optional[str] = None\n url: Optional[str] = None\n published: datetime = datetime.utcnow()\n image: str = "placeholderMainImage"\n images: List[str] = []\n learning: Optional[str]\n tech: Optional[str]\n tools: Optional[str]\n\n\n\nclass Project(ProjectBase, table=True):\n id: int = Field(default=None, primary_key=True)\n created_at: datetime = Field(default_factory=datetime.utcnow)\n updated_at: datetime = Field(default_factory=datetime.utcnow)\nRun Code Online (Sandbox Code Playgroud)\nFastAPI 工作正常,我检查了 localhost:8000/docs并正确进行了类型验证: …
使用 Python SQLModel,我想以最 SQLModel 标准的方式截断表,或删除所有行,并获取已删除行的数量。我怎样才能做到这一点?我正在使用这个:
with Session(engine) as session:
count = session.exec(delete(MyModel)).fetchall()
session.commit()
Run Code Online (Sandbox Code Playgroud)
但它会引发一个错误:
ResourceClosedError('This result object does not return rows. It has been closed automatically.')
Run Code Online (Sandbox Code Playgroud)
我也尝试过scalar(),而fetchone()不是fetchall()没有成功。
请参阅此处的过滤示例:https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel,如何获取所有年龄为空的英雄。
我需要相当于:
select * from hero where age is null
Run Code Online (Sandbox Code Playgroud)
这有效:
select(Hero).where(Hero.age != None)
Run Code Online (Sandbox Code Playgroud)
但是,IDE 抱怨PEP 8: E711 comparison to None should be 'if cond is not None:'
所以我把它改为:
select(Hero).where(Hero.age is None)
Run Code Online (Sandbox Code Playgroud)
但是,它无法按预期工作,导致生成不正确的 SQL:
SELECT * FROM hero WHERE 0 = 1
Run Code Online (Sandbox Code Playgroud)
什么是正确的做法?
是否可以在 SQLModel 创建的模型中使用 PostGIS 几何类型?如果是的话,该怎么办?
sqlmodel ×4
python ×3
sqlalchemy ×2
fastapi ×1
filter ×1
geoalchemy2 ×1
null ×1
postgis ×1
pydantic ×1