Python中如何使用SQLAlchemy查询7天之前的数据?有没有类似MySQL的TO_DAYS函数的方法?

求大佬解答
Python中如何使用SQLAlchemy查询7天之前的数据?有没有类似MySQL的TO_DAYS函数的方法?

2 回复

在SQLAlchemy里查7天前的数据,直接用datetimetimedelta就行,比找TO_DAYS的替代方案更直接。下面是个完整例子:

from datetime import datetime, timedelta
from sqlalchemy import create_engine, Column, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import func

Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'my_table'
    id = Column(Integer, primary_key=True)
    created_at = Column(DateTime)

# 创建连接和会话
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

# 计算7天前的时间点
seven_days_ago = datetime.now() - timedelta(days=7)

# 查询7天前的数据
results = session.query(MyTable).filter(MyTable.created_at < seven_days_ago).all()

for row in results:
    print(row.id, row.created_at)

关键就这一行:MyTable.created_at < seven_days_agodatetime.now() - timedelta(days=7)算出7天前的时间点,然后直接比较就行。

如果你非要用类似TO_DAYS的函数,SQLAlchemy的func模块也能实现,但更啰嗦:

from sqlalchemy import func

# 假设用MySQL
results = session.query(MyTable).filter(
    func.to_days(func.now()) - func.to_days(MyTable.created_at) > 7
).all()

不过真没必要,第一个方法更清晰,而且数据库无关。

总结:用datetime计算时间点然后直接比较最省事。


可以嵌入使用 sql

回到顶部