我在一个实时网站上运行这个。当用户登录时,我会查询他的个人资料以查看他有多少“信用”可用。积分是通过贝宝购买的。如果一个人购买积分并且付款通过,即使我在 phpmyadmin 中运行相同的查询,查询仍然显示 0 积分,它会带来正确的结果。如果我重新启动 apache 网络服务器并重新加载页面,则会显示正确数量的积分。这是我的映射器代码,它显示了每个用户拥有的积分数:
mapper( User, users_table, order_by = 'user.date_added DESC, user.id DESC', properties = {
'userCreditsCount': column_property(
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 > get_order_expire_limit(), # order must not be older than a month
orders_table.c.status == STATUS_COMPLETED
) ).\
label( 'userCreditsCount' ),
deferred = True
)
# other properties....
} )
我正在使用带有flask框架的sqlalchemy,但没有使用他们的flask-sqlalchemy包(只是纯sqlalchemy)
这是我启动数据库的方式:
engine = create_engine( config.DATABASE_URI, pool_recycle = True )
metadata = MetaData()
db_session = scoped_session( sessionmaker( bind = engine, autoflush = True, autocommit = False ) )
我在这个项目中同时学习了 python 和 sqlalchemy,所以我可能会遗漏一些东西,但这个让我发疯了。有任何想法吗?