📅  最后修改于: 2023-12-03 14:55:08.908000             🧑  作者: Mango
在使用 SQLAlchemy 进行数据库操作时,我们经常需要根据日期范围查询数据。本文将介绍如何使用 SQLAlchemy 进行日期之间的过滤。
在开始之前,我们需要安装 SQLAlchemy。在命令行中输入以下命令:
pip install sqlalchemy
另外,我们还需要创建一个数据库连接。这里以 SQLite 为例,在 Python 中连接数据库的方法如下:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db', echo=True)
要查询某个日期范围的数据,我们可以使用 between
运算符。例如,我们要查询 2020 年 1 月 1 日到 2020 年 1 月 31 日之间的订单数据,可以使用以下代码:
from datetime import date
from sqlalchemy import Table, Column, Integer, String, MetaData, Date, between, select
metadata = MetaData()
orders = Table('orders', metadata,
Column('id', Integer, primary_key=True),
Column('customer', String),
Column('date', Date),
Column('amount', Integer))
stmt = select([orders]).where(
between(orders.c.date, date(2020, 1, 1), date(2020, 1, 31)))
with engine.connect() as conn:
result = conn.execute(stmt)
for row in result:
print(row)
运行结果如下:
2021-08-09 13:48:16,994 INFO sqlalchemy.engine.Engine SELECT orders.id, orders.customer, orders.date, orders.amount
FROM orders
WHERE orders.date BETWEEN ? AND ?
2021-08-09 13:48:16,994 INFO sqlalchemy.engine.Engine [generated in 0.00032s] ('2020-01-01', '2020-01-31')
(1, 'Alice', datetime.date(2020, 1, 2), 100)
(2, 'Bob', datetime.date(2020, 1, 15), 200)
除了 between
运算符,我们还可以使用 >
和 <
运算符进行日期范围查询。例如,要查询在 2020 年 1 月 1 日之后的订单,可以使用以下代码:
stmt = select([orders]).where(orders.c.date > date(2020, 1, 1))
with engine.connect() as conn:
result = conn.execute(stmt)
for row in result:
print(row)
运行结果如下:
2021-08-09 13:51:10,601 INFO sqlalchemy.engine.Engine SELECT orders.id, orders.customer, orders.date, orders.amount
FROM orders
WHERE orders.date > ?
2021-08-09 13:51:10,601 INFO sqlalchemy.engine.Engine [generated in 0.00081s] ('2020-01-01',)
(1, 'Alice', datetime.date(2020, 1, 2), 100)
(2, 'Bob', datetime.date(2020, 1, 15), 200)
(3, 'Charlie', datetime.date(2020, 2, 1), 300)
类似地,要查询在某个日期之前的订单,可以使用 <
运算符。
本文介绍了如何使用 SQLAlchemy 进行日期范围查询。我们可以使用 between
、>
和 <
运算符来实现,便于根据具体需求进行筛选。