【发布时间】:2019-11-04 18:03:21
【问题描述】:
我目前正在使用 SQL Alchemy 设置课程。这个类有一个start_date属性,定义如:
from sqlalchemy import Column, DateTime
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Foo(Base):
__tablename__ = "foo"
id = Column(UUID(as_uuid=True), primary_key=True)
start_date = Column(DateTime, nullable=True)
然而,我遇到了类型问题:
foo = Foo(start_date="2019-05-05")
print(foo.start_date, type(foo.start_date))
# 2019-05-05 <class 'str'>
我希望这里有一个日期时间,尤其是当从数据库中获取相同的记录时,我会检索一个日期时间对象:
foo = Foo(id=uuid.uuid4(), start_date="2019-05-05")
db_session.add(foo)
db_session.commit()
db_session.refresh(foo)
print(foo.start_date, type(foo.start_date))
# 2019-03-01 00:00:00 <class 'datetime.datetime'>
有什么方法可以强制从Column 声明中强制转换?
【问题讨论】:
-
是的,你必须自己解析。您可以使用验证器方法和
datetime.strptime将其抽象出来:docs.sqlalchemy.org/en/13/orm/… -
非常相关:stackoverflow.com/questions/8980735/… – “SQLAlchemy 没有内置此功能,因为它遵循 DBAPI/数据库作为最佳和最有效的验证来源和强制价值。”
标签: python sqlalchemy