python odoo_odoo python 使用缓存
from tools.com_cache import cache, ctime, timeblock
# 使用SQL來取得指定商品在指定倉庫的庫存數(shù)量
def get_warehouse_stock_qty(self,warehouse_id):
self.ensure_one()
# 從緩存中查詢,如有
cache_data = cache.warehouse_stock_qty.get([self.id,warehouse_id])
if isinstance(cache_data,list):
# 則直接將緩存中的數(shù)據(jù)返回。 要注意:每次出入庫審核時(shí)將緩存中的數(shù)據(jù)清空或者更新,保證緩存數(shù)據(jù)是最新的。
return cache_data
# 若無,則從數(shù)據(jù)庫查詢
self.env.cr.execute('''
SELECT sum(CASE WHEN whi.transport_state = 'onway' OR buyr.buy_receipt_state = 'onway' THEN 0 ELSE
line.qty_remaining END) as qty,
SUM(line.qty_remaining * line.cost_unit) AS cost,
wh.name as warehouse
FROM wh_move_line line
LEFT JOIN wh_move whm ON whm.id = line.move_id
LEFT JOIN wh_internal whi ON whm.id = whi.move_id
LEFT JOIN buy_receipt buyr ON whm.id = buyr.buy_move_id
LEFT JOIN warehouse wh ON line.warehouse_dest_id = wh.id
WHERE wh.type in ('stock','supplier')
AND wh.code not in ('Supplier','General')
AND line.qty_remaining != 0
AND line.state in ('done','onway')
AND line.goods_id = %s
AND wh.id= %s
GROUP BY wh.name
''' % (self.id,warehouse_id))
rows=self.env.cr.dictfetchall()
# 將查詢結(jié)果寫入緩存中
cache.warehouse_stock_qty.set((self.id,warehouse_id),rows)
return rows
總結(jié)
以上是生活随笔為你收集整理的python odoo_odoo python 使用缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4月17日鸿蒙开发者大会,4月17日这天
- 下一篇: json和python中字典的区别和联系