首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlModel日期时间字段在执行时抛出错误

SqlModel日期时间字段在执行时抛出错误
EN

Stack Overflow用户
提问于 2022-02-02 00:22:50
回答 2查看 2.9K关注 0票数 1

我在python3.8中使用SQLModel

当我添加日期时间字段created_at: datetime = Field(default_factory=utcnow(), nullable=False)

我得到了这个错误

代码语言:javascript
复制
File "./app/main.py", line 16, in <module>
    class Post(SQLModel, table=True):
  File "/Users/markwardell/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/sqlmodel/main.py", line 277, in __new__
    new_cls = super().__new__(cls, name, bases, dict_used, **config_kwargs)
  File "pydantic/main.py", line 204, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/fields.py", line 488, in pydantic.fields.ModelField.infer
  File "pydantic/fields.py", line 419, in pydantic.fields.ModelField.__init__
  File "pydantic/fields.py", line 539, in pydantic.fields.ModelField.prepare
  File "pydantic/fields.py", line 801, in pydantic.fields.ModelField.populate_validators
  File "pydantic/validators.py", line 718, in find_validators
RuntimeError: error checking inheritance of <module 'datetime' from '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/datetime.py'> (type: module)

如果我不添加created_at,表将按预期在PostgresSql中创建。

代码语言:javascript
复制
import datetime
from typing import Optional
import utcnow as utcnow
from fastapi import FastAPI
from sqlalchemy import TIMESTAMP, text
from sqlmodel import Field, Session, SQLModel, create_engine, select
from app.database import SQLALCHEMY_DATABASE_URL

class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    secret_name: str
    age: Optional[int] = Field(default=None, index=True)


class Post(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
    title: str = Field(nullable=False)
    content: str = Field(nullable=False)
    published: bool = Field(default=True, nullable=False)
    created_at: datetime = Field(default_factory=utcnow(), nullable=False)

engine = create_engine(SQLALCHEMY_DATABASE_URL)


def create_db_and_tables():
    SQLModel.metadata.create_all(engine)


app = FastAPI()


@app.on_event("startup")
def on_startup():
    create_db_and_tables()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-09 09:50:09

这一点在一条评论中作了解释,但只是作为对其他人的回答:

您必须像这样导入日期时间

代码语言:javascript
复制
from datetime import datetime

我们在这个上下文中需要的datetime实际上是一个模块中的一个类,也称为datetime

票数 4
EN

Stack Overflow用户

发布于 2022-03-03 11:26:41

另外,请注意,您的代码应该是

代码语言:javascript
复制
created_at: datetime.datetime = Field(default_factory=datetime.utcnow, nullable=False)

如果没有在实例化中调用utcnow,那么这样做将给出在实例化时所参考的每个入口日期时间。因此,default_factory应该是函数,而不是值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70949248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档