SQLalchemy和方法内部列属性
我有一个SQLalchemy和方法内部列属性,sqlalchemy,Sqlalchemy,我有一个column\u属性,它检查一个用户可以获得多少信用: select( [func.ifnull( func.sum( orders_table.c.quantity ), 0 )], orders_table.c.user_id == users_table.c.id ).where( and_( orders_table.c.date_added < now_unix(), orders_table.c.date_expires > now
column\u属性
,它检查一个用户可以获得多少信用:
select(
[func.ifnull( func.sum( orders_table.c.quantity ), 0 )],
orders_table.c.user_id == users_table.c.id
).where( and_(
orders_table.c.date_added < now_unix(),
orders_table.c.date_expires > now_unix(),
orders_table.c.status == STATUS_COMPLETED
) ).label( 'userAllowedCredits' ),
deferred = True
选择(
[func.ifnull(函数和(订单\表c.数量),0)],
订单\u table.c.user\u id==用户\u table.c.id
).在何处(及_(
订单\u表c.date\u添加now\u unix(),
订单\表c.status==状态\完成
))。标签('userAllowedCredits'),
延迟=真
now\u unix()
方法返回当前unix时间戳,但问题是此方法仅加载一次,每次调用此userAllowedCredits
属性时,查询都会基于启动应用程序时保存的相同初始值进行搜索。我需要这个now\u unix()
方法在每次调用时返回实际的当前时间戳
我说得通吗?您可能在启动时存储此表达式,因此现在只在启动时执行_unix()。从SqlAlchemys的角度来看,它只是一个值。如何解决这个问题,在一定程度上取决于您的用例。您可以使用,它将使用数据库内置的
now()
函数。如果您现在必须使用自己的unix()
,您仍然可以将其作为参数传递。使用func.CURRENT\u TIMESTAMP()
,因为可以为func指定任何名称。如果SQLAlchemy不知道函数名,它将按原样呈现。对于SQLAlchemy知道的常见SQL函数,该名称可能会被解释为一个通用函数,该函数将被适当地编译到目标数据库中