python - SQL Alchemy - 将日期时间设置为字符串并获取日期?
问题描述
我目前正在使用 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
声明中强制转换?
解决方案
我怀疑这里发生的事情是您实际上在第一个片段中访问的是您作为start_date
关键字参数传递的字符串。这表明 SQLAlchemy 实际上并没有强制您输入的类型。
当对象被提交到数据库时,这个字符串 ( '2019-05-05'
) 被传递给 Postgres。由于 SQL 对引用的值进行类型转换,并且格式正确,因此它作为时间戳添加到数据库中。
插入后,从数据库中读取整行。这将返回一个datetime
实例,并且该属性将被设置为一个datetime
值。
请记住,这部分是我的猜测,我实际上并没有查看 SQLAlchemy 处理输入值的方式。
推荐阅读
- c# - SSIS 脚本任务:FireError() 在 Catch 块中挂起
- elasticsearch - Kibana 截断数据
- python - Pandas DataFrame - 每行计数 0
- python - Python List 与适当的索引匹配
- xcode - Xamarin.iOS xcode 错误:更新目标 C 类型信息时出错
- c# - TFS 2015:发布定义 REST API 问题
- c# - 在 C# 中调用 Cygwin GCC DLL 在 malloc 上挂起
- python - 云之间的间距
- java - 如何保存我的 .java 文件并通过电子邮件发送?(初学者)
- xcode - 第二个 NSScreen OSX 10.13.4 或更高版本上的 NSWindow