在 SQLAlchemy 中,当我提交选择日期时间属性的原始 SQL 查询时,日期作为字符串返回。但是,当我使用该Table.select
方法而不是原始 SQL 时,日期被正确格式化为datetime.datetime
对象。
这是一个最小的例子:
import sqlalchemy as sa
eng = sa.create_engine('sqlite:///:memory:')
meta = sa.MetaData()
foos = sa.Table('foos', meta,
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('created_at', sa.DateTime))
meta.create_all(eng)
conn = eng.connect()
现在,当我们使用面向对象的方法进行查询时:
>>> dict(conn.execute(foos.select()).fetchone())
{'id': 1, 'created_at': datetime.datetime(2017, 6, 1, 11, 0)}
那是一个datetime.datetime
。而使用原始 SQL:
>>> dict(conn.execute('select * from foos').fetchone())
{'id': 1, 'created_at': '2017-06-01 11:00:00.000000'}
那是一个字符串。(虽然整数属性id
被识别为这样!)
我知道我可以datetime.strptime
用来解析字符串,但我的问题是
注意:我知道这个相关线程,但它没有回答我的问题。
您使用SQLite
as DB
,日期和时间类型存储为strings
,当您使用时raw SQL
,查询结果将为字符串格式,但是,当您使用时sqlalchemy
,日期和时间类型存储为字符串,然后datetime
在行时转换回对象被退回。请参阅关于sqlalchemy.types.DateTime 的官方文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句