【发布时间】:2013-12-08 19:17:35
【问题描述】:
我有一个 Transaction 模型,其中一个字段是
transaction_date = Column('transaction_date',
sa.types.DateTime(timezone=True),
nullable=False)
和数据库字段看起来像
5e5993e5-a05d-4e1a-b934-7179566d6315 | Car loan | 2013-08-20 13:31:16.97-07 | | 428.00 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 26c03288-86f8-4881-b5de-48e9afb11d88 | 2013-08-21 17:31:17.138526-07
162d3409-2d73-4922-9147-52a391f86d34 | Bharat bazar | 2013-08-21 20:39:21.465-07 | | 6.84 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 20fe3330-80e1-4908-9f57-5b7ef575b197 | 2013-08-22 00:39:23.287429-07
3a6c21e1-2ee6-4217-8a0e-fde13365263b | 7 eleven | 2013-08-23 13:53:26.593-07 | | 26.03 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 1e73aa3f-06f5-4019-828a-3f4f4d5cbe2e | 2013-08-23 17:53:29.200293-07
ad261739-9ab2-4d13-b9c8-4809b3d7a066 | Vitamin shoppe | 2013-08-24 12:47:52.74-07 | | 5.46 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 3141359d-9df6-4425-9261-518ccda847df | 2013-08-24 16:47:56.430282-07
94c721a5-5cd2-41ac-b842-5989294ec978 | T2 | 2013-08-31 16:30:41.435-07 | | 200.00 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 15147702-8227-4ee8-8b05-d2e8d532bd0a | 2013-11-24 00:30:41.457085-08
我编写的以下代码返回两个日期之间的交易
def get_transactions_for_dates(user, start, end):
if start > end:
raise ValueError('start date should not be greater than end date')
return db.session.query(Transaction) \
.filter(Transaction.user == user) \
.filter(Transaction.transaction_date >= start) \
.filter(Transaction.transaction_date <= end) \
.order_by(Transaction.transaction_date.desc()).all()
有问题?
月末数据缺失2013-08-31 16:30:41.435-07
94c721a5-5cd2-41ac-b842-5989294ec978 | T2 | 2013-08-31 16:30:41.435-07 | | 200.00 | t | bd675d42-aa9b-11e2-9d27-b88d1205c810 | 15147702-8227-4ee8-8b05-d2e8d532bd0a | 2013-11-24 00:30:41.457085-08
我记录了查询,并通过sqlalchemy找到了以下查询
INFO:sqlalchemy.engine.base.Engine:SELECT transactions.uuid AS transactions_uuid, transactions.name AS transactions_name, transactions.transaction_date AS transactions_transaction_date, transactions.created_on AS transactions_created_on, transactions.modified_on AS transactions_modified_on, transactions.amount AS transactions_amount, transactions.debit AS transactions_debit, transactions.user_id AS transactions_user_id, transactions.category_id AS transactions_category_id
FROM transactions
WHERE %(param_1)s = transactions.user_id AND transactions.transaction_date >= %(transaction_date_1)s AND transactions.transaction_date <= %(transaction_date_2)s ORDER BY transactions.transaction_date DESC
INFO:sqlalchemy.engine.base.Engine:{'transaction_date_1': datetime.date(2013, 8, 1), 'transaction_date_2': datetime.date(2013, 8, 31), 'param_1': 'bd675d42-aa9b-11e2-9d27-b88d1205c810'}
INFO:sqlalchemy.engine.base.Engine:SELECT categories.uuid AS categories_uuid, categories.name AS categories_name, categories.parent AS categories_parent, categories.created_on AS categories_created_on
FROM categories
问题
- 数据类型不匹配会是一个问题吗? date 在查询 vs DateTime(tzinfo=true)?
- 我该如何解决这个问题?
【问题讨论】:
标签: python postgresql datetime sqlalchemy