2017-09-25 103 views
0

我正在使用燒瓶,peewee,sqlite3。對於計費系統,我試圖爲特定用戶創建所有賬單的概覽。新帳單添加了「bill_number」,並且可以有多個訂單項。如果賬單有多個行項目,「bill_number」將在數據庫中複製。當我查詢數據庫I時,只想獲得顯示「bill_number」的第一行並跳過具有相同「bill_number」的其他行。如何在燒瓶中查詢peewee時刪除重複條目的行?

SQlite Database: 
| id | bill_number | user_id | description | price | 
| 1 | 1   | 8  | Logo Design | 250.00 | 
| 2 | 2   | 8  | Web Design | 500.00 | 
| 3 | 2   | 8  | Logo Design | 250.00 | 
| 4 | 3   | 8  | Web Design | 550.00 | 
| 5 | 4   | 8  | Img Design | 250.00 | 

在我的應用程序ID喜歡的東西,如查詢:

{% for bill in bills %} 
view details for <a href="">Bill #{{ bill.bill_number }}</a> 
{% endfor %} 

渲染看起來是這樣的:

@app.route('/billOverview') 
def bill_overview(): 
    bills = models.Bill.select().where(models.Bill.user_id == current_user.id).deduplicate(models.Bill.bill_number) 
    return render_template('bills-overview.html', bills=bills) 

,這樣我可以在我的模板一樣輕鬆地閱讀

view details for Bill #1 
view details for Bill #2 
view details for Bill #3 
view details for Bill #4 

回答

0

它沒有廁所k像peewee支持你提到的API。你有幾個選擇:

  • 使用一組通過對bill_number列進行重複數據刪除,請參閱peewee文檔this「黑客」。
  • 進一步規範你的模式。本表中不允許有多個(bill_number, user_id)行。創建另一個表格(bill_items或其他)來存儲每個單獨的項目。這樣,您的select查詢將返回所需的行,並且您可以加入新表以獲取詳細視圖。
0

其實我解決它自己。答案是更容易比預期:-)

bills = models.Bill.select().where(models.Bill.user_id == current_user.id).group_by(models.Bill.bill_number) 

我一直在尋找GROUP_BY()

很多