estoy usando SQLModel en python 3.8
Cuando agrego mi campo de fecha y hora created_at: datetime = Field(default_factory=utcnow(), nullable=False)
me sale este error
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) Si no agrego el created_at , la tabla se crea en PostgresSql como se esperaba. Código
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()Esto se explicó en un comentario, pero solo para agregarlo como respuesta para otros:
Debe importar fecha y hora como esta
from datetime import datetime La fecha y datetime que requerimos en este contexto es en realidad una clase dentro de un módulo que también se llama fecha y datetime .
Además, tenga en cuenta que su código debe ser
created_at: datetime.datetime = Field(default_factory=datetime.utcnow, nullable=False) sin llamar a utcnow en la creación de instancias, al hacerlo se le dará a cada entrada la fecha y hora consultadas en la creación de instancias. Por lo tanto, default_factory debería ser la función, no el valor.