这是我的声明模型:
import datetime from sqlalchemy import Column, Integer, DateTime from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Test(Base): __tablename__ = 'test' id = Column(Integer, primary_key=True) created_date = DateTime(default=datetime.datetime.utcnow)
但是,当我尝试导入该模块时,出现以下错误:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "orm/models2.py", line 37, in <module> class Test(Base): File "orm/models2.py", line 41, in Test created_date = sqlalchemy.DateTime(default=datetime.datetime.utcnow) TypeError: __init__() got an unexpected keyword argument 'default'
如果我使用整数类型,我可以设置默认值。这是怎么回事?
出现此错误的原因是,与其他类型(例如)不同,DateTimeSQLAlchemy 中的列类型不直接支持参数。相反,您应该将 SQLAlchemy 的或关键字参数与构造函数一起使用。要为列指定默认值,您可以在构造函数中使用参数,而不是在其自身上使用参数。default``Integer``server_default``default``Column``DateTime``default``Column``DateTime
DateTime
default``Integer``server_default``default``Column``DateTime``default``Column``DateTime
修复模型的方法如下:
import datetime from sqlalchemy import Column, Integer, DateTime from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Test(Base): __tablename__ = 'test' id = Column(Integer, primary_key=True) created_date = Column(DateTime, default=datetime.datetime.utcnow) # Use default in Column
Column(DateTime, default=datetime.datetime.utcnow)
default
Column
datetime.datetime.utcnow()
这应该可以解决您的问题。现在模型将按预期工作,并且created_date当插入新记录而未指定时,列将默认为当前 UTC 时间created_date。
created_date