【发布时间】:2017-11-30 13:39:00
【问题描述】:
在 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 来解析字符串,但我的问题是
- 为什么我得到一个字符串?
- 我可以让 sqlalchemy 使用原始 SQL 来给我一个日期时间吗?如果是,怎么做?
注意:我知道this related thread,但它没有回答我的问题。
【问题讨论】:
标签: python sqlite datetime sqlalchemy