亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Flask SQL Alchemy 使用 != 列條件查詢表

Flask SQL Alchemy 使用 != 列條件查詢表

蝴蝶刀刀 2022-12-14 21:06:41
我有一個many to many表,正在嘗試運行 2 個查詢,將其中一個表分成兩個列表 - 那些have an item和those that don't.我有一個名為的表items和一個名為lists多對多關系的表。下面顯示的函數是項目模型類的一部分。當一個項目 id 被傳遞到函數中時,它檢查所有記錄的關聯表,然后過濾它自己的值。我編寫了一個測試函數,它創建了 4 個列表并向其中兩個列表添加了 1 個項目。然后測試調用這兩個函數。第一個函數正確返回它添加到的 2 個列表。第二個測試錯誤地返回所有 4 個列表。這兩個函數之間的唯一區別是==vs !=。這意味著我的非平等條件沒有觸發。Flask搭配使用Flask-SQLAlchemy第一個查詢檢查equality按預期工作,但not equal查詢根本不起作用。我已經嘗試過 SQLAlchemy 文檔,嘗試過使用!=, not_,is not但沒有任何運氣。谷歌搜索也不會產生任何有用的結果。在 SQLITE3 中這是有效的,這正是我試圖用 flask-SQLAlchemy 完成的:select * from Listleft join items_listson items_lists.list_id = List.idWHERE items_lists.item_id is not item.id;這是我的代碼,在此先感謝您的指導。def in_list(self):        return List.query.join(            items_lists, (items_lists.c.list_id == list.id)            ).filter(               items_lists.c.item_id == self.id               )     def not_in_list(self):        return List.query.join(            items_lists, (items_lists.c.list_id == list.id)            ).filter(                items_lists.c.item_id != self.id                )我正在使用 Python 的 unittest 進行測試 - 這是檢查條件的代碼。測試失敗self.assertEqual(nm1, [l2, l4])而不是看到[l2, l4]結果,我得到[l1,l2,l3,l4]- 根據測試條件,item1 -i1在列表中 -[l1, l3]所以第二個查詢條件不起作用。其他不起作用的東西:.filter(   items_lists.c.list_id == not_(self.id)) .filter(   items_lists.c.list_id == ~self.id) 這將返回一個空列表,而不是讓 item 不是成員的兩個列表。
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

我能夠通過更改 not_in_lists 函數來調整代碼如下。


def not_in_lists(self):

        query = List.query.filter(

            List.id.notin_(

                db.session.query(items_lists.c.list_id).filter(

                    items_lists.c.item_id == self.id)))

        list = []

        for i in query:

            list.append(i)


        return list


查看完整回答
反對 回復 2022-12-14
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

not_in_list函數替換為以下函數。

def not_in_list(self):
        return List.query.filter(List.id.notin_(session.query(item_lists.c.list_id).filter(item_lists.c.item_id == self.id)))

它不起作用,因為當您在查詢中說時!= self.id,它意味著等于其他所有內容,包括第 3 項i3。但是i3鏈接到所有列表。因此它會將所有列表返回給您。


查看完整回答
反對 回復 2022-12-14
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號