在SQLAlchemy中,当我提交选择datetime属性的原始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()
现在,当我们使用面向对象的appraoch进行查询时:
>>> 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
来解析字符串,但我的问题是
注意:我知道this related thread,但它没有回答我的问题。
答案 0 :(得分:2)
您使用SQLite
作为DB
,日期和时间类型存储为strings
,当您使用raw SQL
时,查询结果将采用字符串格式,但是,当您使用sqlalchemy
时,日期和时间类型将存储为字符串,然后在返回行时将其转换回datetime
个对象。请参阅有关sqlalchemy.types.DateTime的官方文档。