現在、sqlalchemyではこれが可能ではないと考えていますが、すべてのRDMBSがこれをサポートしているわけではありません。
あなたはいつもしかしOR(AND...)
条件にこれを変換することができます。
filter_rows = [
(2752937066, 'http://members.aye.net/~gharris/blog/'),
(3799762538, 'http://www.coxandforkum.com/'),
]
qry = session.query(Page)
qry = qry.filter(or_(*(and_(Page.url_crc == crc, Page.url == url) for crc, url in filter_rows)))
print qry
は(SQLiteのため)のようなものを作る必要があります。
SELECT pages.id AS pages_id, pages.url_crc AS pages_url_crc, pages.url AS pages_url
FROM pages
WHERE pages.url_crc = ? AND pages.url = ? OR pages.url_crc = ? AND pages.url = ?
-- (2752937066L, 'http://members.aye.net/~gharris/blog/', 3799762538L, 'http://www.coxandforkum.com/')
また、あなただけの1に2つの列を組み合わせることができます。
filter_rows = [
(2752937066, 'http://members.aye.net/~gharris/blog/'),
(3799762538, 'http://www.coxandforkum.com/'),
]
qry = session.query(Page)
qry = qry.filter((func.cast(Page.url_crc, String) + '|' + Page.url).in_(["{}|{}".format(*_frow) for _frow in filter_rows]))
print qry
下記(SQLiteのために)、あなたはIN
を使用できるように:
SELECT pages.id AS pages_id, pages.url_crc AS pages_url_crc, pages.url AS pages_url
FROM pages
WHERE (CAST(pages.url_crc AS VARCHAR) || ? || pages.url) IN (?, ?)
-- ('|', '2752937066|http://members.aye.net/~gharris/blog/', '3799762538|http://www.coxandforkum.com/')
それは、実行可能なアイデアです。しかし、私の必要性に合っていません。私はより詳細な質問を延長しました。 – vvladymyrov
「IN」バージョンnでの回答も更新されました。 – van
ありがとうございました。私は2つの列を1つの文字列に結合することを考えました - しかし、この場合はインデックスが使用されないので、これは遅くなります。 – vvladymyrov