第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

sqlalchemy:獲取值不存在的ID

sqlalchemy:獲取值不存在的ID

白衣非少年 2023-04-18 16:03:19
有一個(gè)tablewith columns listing_ids,keys如何獲取listing_ids(和相應(yīng)的缺失鍵)其中l(wèi)ist_of_values不存在的值keys?list_of_values = [key2,key3]桌子listing_id  keys424         key1424         key2424         key3523         key12433        key22433        key153          key23           key3我需要得到以下結(jié)果:listing_id  keys_that_does_not_exist523         key2523         key32433        key353          key33           key2我試過(guò):ids_without_keys_q = session.query(Table)\                             .filter(~ exists().where(Table.key.in_(list_of_values))我在用postgresql
查看完整描述

1 回答

?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

問(wèn)題是您期望返回多少個(gè)值。PostgreSQL 對(duì)生成的數(shù)據(jù)不是很好,就像這個(gè)解決方案使用的那樣,所以如果它太慢,只獲取所有組合的列表并使用 Python 查找不存在的組合可能會(huì)更快。


另外,我在這里根據(jù)您的查詢假設(shè)每個(gè) listing_id/key 對(duì)有一行,并且您沒(méi)有將鍵存儲(chǔ)為字符串?dāng)?shù)組。如果是這樣,請(qǐng)告訴我,我會(huì)修改答案。


首先,我假設(shè)您不想要沒(méi)有匹配項(xiàng)的 ID,因此您可以像這樣構(gòu)造它而不是生成列表。我使用 來(lái)func.count()過(guò)濾掉所有與所有鍵匹配的列表:

unique_incomplete_listings = session.query(Table.listing_id.label('listing_id'))

  .group_by(Table.listing_id)

  .having(func.count() < 3)

其次,將其轉(zhuǎn)換為CTE,然后從查詢中獲取 (listing, key) 的所有可能組合:

from sqlalchemy.dialects.postgresql import array


unique_incomplete_listings = unique_incomplete_listings.cte()

all_potential_matches = session.query(

    unique_incomplete_listings.c.listing_id,

    # this creates a cartesian product of listing_ids to elements in the array

    func.unnest(array(['key1', 'key2', 'key3']))

)

使用EXCEPT刪除您在數(shù)據(jù)庫(kù)中找到的任何匹配項(xiàng)

query = all_potential_matches.except_all(

  session.query(Table.listing_id, Table.key)

  # We join here to prevent doing extra work if the listing does have all keys.

  # If this makes the query slower, consider making the CTE a subquery and

  # removing this join instead

  .join(unique_incomplete_listings,

        unique_incomplete_listings.c.listing_id == Table.listing_id)

)


查看完整回答
反對(duì) 回復(fù) 2023-04-18
  • 1 回答
  • 0 關(guān)注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)