Vit*_*mar 93 python sql database orm sqlalchemy
这是模型:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Run Code Online (Sandbox Code Playgroud)
我想在两个日期之间进行过滤,例如选择间隔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
Run Code Online (Sandbox Code Playgroud)
我知道这不正确,但怎么做正确?
提前致谢!
van*_*van 158
事实上,您的查询是正确的,除了错字:您的过滤器排除了所有记录:您应该更改<=for >=,反之亦然:
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')
Run Code Online (Sandbox Code Playgroud)
你也可以使用between:
qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
Run Code Online (Sandbox Code Playgroud)
小智 7
如果你想获得整个时期:
from sqlalchemy import and_, func
query = DBSession.query(User).filter(and_(func.date(User.birthday) >= '1985-01-17'),\
func.date(User.birthday) <= '1988-01-17'))
Run Code Online (Sandbox Code Playgroud)
这意味着范围:1985-01-17 00:00 - 1988-01-17 23:59
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()
Run Code Online (Sandbox Code Playgroud)
它等于:
select
count(id)
from
Chance
where
repo_id=:repo_id
and status='1'
and date(apple_time) <= end
and date(apple_time) >= start
Run Code Online (Sandbox Code Playgroud)
希望能帮到你。
| 归档时间: |
|
| 查看次数: |
75016 次 |
| 最近记录: |