我在python3.8中使用SQLModel
当我添加日期时间字段created_at: datetime = Field(default_factory=utcnow(), nullable=False)时
我得到了这个错误
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中创建。码
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()发布于 2022-02-09 09:50:09
这一点在一条评论中作了解释,但只是作为对其他人的回答:
您必须像这样导入日期时间
from datetime import datetime我们在这个上下文中需要的datetime实际上是一个模块中的一个类,也称为datetime。
发布于 2022-03-03 11:26:41
另外,请注意,您的代码应该是
created_at: datetime.datetime = Field(default_factory=datetime.utcnow, nullable=False)如果没有在实例化中调用utcnow,那么这样做将给出在实例化时所参考的每个入口日期时间。因此,default_factory应该是函数,而不是值。
https://stackoverflow.com/questions/70949248
复制相似问题