以下是模型:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...我想在两个日期之间进行过滤,例如,选择间隔18-30年的所有用户。
如何用SQLAlchemy实现?
我在想:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27我知道这是不正确的,但如何做正确呢?
发布于 2012-01-18 00:54:21
实际上,除了输入错误之外,您的查询是正确的:您的过滤器排除了所有记录:您应该更改>=的<=,反之亦然:
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
qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))发布于 2016-09-07 16:20:09
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()它等于:
select
count(id)
from
Chance
where
repo_id=:repo_id
and status='1'
and date(apple_time) <= end
and date(apple_time) >= startwish可以帮助你。
发布于 2021-09-21 11:00:55
这是一个使用flask-marshmallow的最新Flask版本。
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)) https://stackoverflow.com/questions/8895208
复制相似问题