希望你們今天過得好
我有一個 python 腳本,它name從stock_picking表中提取一個:
self.env.cr.execute("SELECT name FROM stock_picking WHERE sale_id = %s", [pulled_so_id])
raw_pick = self.env.cr.fetchall()
執行時,上面的查詢運行良好并顯示這三個名稱的結果:
[('WH/OUT/00013',), ('WH/OUT/00011',), ('WH/OUT/00012',)]
我將這三個結果轉換為字串,洗掉了幾個不需要的字符,并將其中的三個分配給一個變數。長話短說,它變成了這樣:
pulled_picking_name = str(raw_pick5)
# In my terminal, a variable above now contains clean result of :
# 'WH/OUT/00013','WH/OUT/00011','WH/OUT/00012'
現在,我想用這一行將它pulled_picking_name放入UPDATE我的同一個 python 腳本中的查詢中:
self.env.cr.execute("UPDATE account_move SET partner_id = %s WHERE ref IN (%s)",
[pulled_partner_id, pulled_picking_name])
但隨后什么都沒有發生。
我IN (%s)用我自己宣告的字串填充了它,它運行良好。psql我還用上面的查詢直接測驗了這三個結果UPDATE,它也很好用。
但是當我將這三個結果分配給變數并將其傳遞給我的查詢時,什么都沒有發生。沒有錯誤資訊或任何東西。
我覺得我錯過了一些東西,但我可以弄清楚它是什么:(
請,每一個幫助真的很感激!
uj5u.com熱心網友回復:
您絕對不需要“轉換為字串并洗掉不需要的字符”。你得到了什么
raw_pick = self.env.cr.fetchall()
# [('WH/OUT/00013',), ('WH/OUT/00011',), ('WH/OUT/00012',)]
是行元組的串列;由于結果集的每一行都有一列,因此您會得到 1 個元組。
如果您想要一個普通的字串陣列(或任何第一列的資料型別),請執行
raw_pick = [row[0] for row in self.env.cr.fetchall()]
# ['WH/OUT/00013', 'WH/OUT/00011', 'WH/OUT/00012']
要使用in,您需要將一個元組傳遞給 Postgres 配接器。raw_pick假設你想對所有這些字串做點什么,
names = tuple(raw_pick)
self.env.cr.execute(
"UPDATE account_move SET partner_id = %s WHERE ref IN %s",
[pulled_partner_id, tuple(raw_pick)],
)
成功了。
uj5u.com熱心網友回復:
更重要的是,恕我直言,為什么在地球上你會搞亂將資料前后拖到一些 Python 代碼中?
UPDATE account_move SET partner_id = %s WHERE ref IN (
SELECT name FROM stock_picking WHERE sale_id = %s
);
還有其他方法可以撰寫該查詢,但這只是將兩個部分粘在一起。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418797.html
標籤:
上一篇:為什么這個索引掃描這么慢?
下一篇:Postgres文本到json
