SQLAlchemy使用遇见问题

SQLAlchemy批量删除问题

参考文章: SQLAlchemy批量删除问题

问题场景

1
2
3
4
db.session.query(Article).filter(Article.id.in_(items)).delete()

# 报错提醒
sqlalchemy.exc.InvalidRequestError

删除记录时,默认会尝试删除 session 中符合条件的对象,而 in 操作估计还不支持,于是就出错了。解决办法就是删除时不进行同步,然后再让 session 里的所有实体都过期:

1
2
session.query(User).filter(User.id.in_((1, 2, 3))).delete(synchronize_session=False)
session.commit() # or session.expire_all()

此外,update 操作也有同样的参数,如果后面立刻提交了,那么加上 synchronize_session=False 参数会更快。

SQLAlchemy查询当日数据

参考文章: SQLAlchemy查询当日数据

模型中存在一个时间字段

1
create_time = db.Column(db.DateTime, nullable=False, default=datetime.now)

使用ORM查询今天的时间,我们可计算出今天的开始时间和结束时间然后进行比较查询。不过,我们可以直接通过时间判断查询。

1
2
3
Tokens.query.filter(
db.cast(Tokens.create_time, db.DATE) == db.cast(current_time, db.DATE)
).all()
知识就是财富
如果您觉得文章对您有帮助, 欢迎请我喝杯水!