我们在一个有遗留数据库的项目中使用SQLalchemy。数据库具有函数/存储过程。过去我们使用原始SQL,我们可以在查询中使用这些函数作为过滤器。
如果可能的话,我想对SQLAlchemy查询做同样的事情。我读过@hybrid_属性,但是有些函数需要一个或多个参数,例如
我有一个用户模型,它连接了一堆历史记录。此用户的这些历史记录有一个日期和一个借贷字段,因此我们可以通过在给定日期之前执行SUM(credit) - SUM(debit)
来查找用户在特定时间点的余额。
我们有一个名为dbo.Balance(user_id, date_time)
的数据库函数。我可以用它来检查用户在给定时间点的余额。在
我想在查询中使用这个标准,只选择在特定日期/时间有负余额的用户。在
selection = users.filter(coalesce(Users.status, 0) == 1,
coalesce(Users.no_reminders, 0) == 0,
dbo.pplBalance(Users.user_id, datetime.datetime.now()) < -0.01).all()
这当然是一个不起作用的例子,只是为了让你明白我想做什么。解决方案看起来是使用hybrd属性,但是正如我前面提到的,这些属性只在没有参数的情况下工作(因为它们是属性,而不是方法)。在
任何关于如何实现这样的东西的建议(如果可能的话)都是受欢迎的。在
谢谢
@hybrid_属性本身并不是生成特定SQL语句的方法,它只是一个助手,可以向ORM映射类添加更多查询生成功能。在
可以使用func构造调用可以作为普通函数调用的SQL函数(例如,没有任何“EXEC XYZ”类型的语法),这意味着您的查询已经准备就绪:
相关问题 更多 >
编程相关推荐