首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLAlchemy:如何过滤日期字段?

SQLAlchemy:如何过滤日期字段?
EN

Stack Overflow用户
提问于 2012-01-17 21:14:49
回答 3查看 124.6K关注 0票数 127

以下是模型:

代码语言:javascript
运行
复制
class User(Base):
    ...
    birthday = Column(Date, index=True)   #in database it's like '1987-01-17'
    ...

我想在两个日期之间进行过滤,例如,选择间隔18-30年的所有用户。

如何用SQLAlchemy实现?

我在想:

代码语言:javascript
运行
复制
query = DBSession.query(User).filter(
    and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
) 

# means age >= 24 and age <= 27

我知道这是不正确的,但如何做正确呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-18 00:54:21

实际上,除了输入错误之外,您的查询是正确的:您的过滤器排除了所有记录:您应该更改>=<=,反之亦然:

代码语言:javascript
运行
复制
qry = DBSession.query(User).filter(
        and_(User.birthday <= '1988-01-17', User.birthday >= '1985-01-17'))
# or same:
qry = DBSession.query(User).filter(User.birthday <= '1988-01-17').\
        filter(User.birthday >= '1985-01-17')

您也可以使用between

代码语言:javascript
运行
复制
qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
票数 215
EN

Stack Overflow用户

发布于 2016-09-07 16:20:09

代码语言:javascript
运行
复制
from app import SQLAlchemyDB as db

Chance.query.filter(Chance.repo_id==repo_id, 
                    Chance.status=="1", 
                    db.func.date(Chance.apply_time)<=end, 
                    db.func.date(Chance.apply_time)>=start).count()

它等于:

代码语言:javascript
运行
复制
select
   count(id)
from
   Chance
where
   repo_id=:repo_id 
   and status='1'
   and date(apple_time) <= end
   and date(apple_time) >= start

wish可以帮助你。

票数 7
EN

Stack Overflow用户

发布于 2021-09-21 11:00:55

这是一个使用flask-marshmallow的最新Flask版本。

代码语言:javascript
运行
复制
from datetime import date, timedelta

from flask import jsonify

from app import db, ma
from app.models import User

from . import main

class UserSchema(ma.Schema):
    class Meta:
        fields = ('forename', 'surname', 'birthday', ...)


@main.route('/', methods=('GET',))
def get_users():

    start_range = date.today() + timedelta(years=-30)
    end_range = date.today() + timedelta(years=-18)

    users = db.session.query(User).filter(User.birthday.between(start_range, end_range)).all()

    users_schema = UserSchema(many=True)

    return jsonify(users_schema.dump(users))     
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8895208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档