我有這個運行在一個網站上。當用戶登錄時,我查詢他的個人資料以查看他有多少可用的「積分」。積分通過paypal購買。如果某人購買了信用額並且付款已經完成,那麼即使我在phpmyadmin中運行相同的查詢,該查詢仍會顯示0個信用額度,但會帶來正確的結果。如果我重新啓動apache web服務器並重新加載頁面,正在顯示正確的信用數量。這裏是我的映射器代碼,顯示信用的數量每個用戶:sqlalchemy緩存一些查詢
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....
})
我使用的是瓶中框架SQLAlchemy的,但沒有使用他們的燒瓶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的這個項目,所以我可能會丟失的東西,但是這一次我發瘋。有任何想法嗎?
我不認爲autocommit設置爲True是一個聰明的方法。他們甚至不會在他們的文檔中推薦它。 –