2013-11-25 5 views
8

एसए regexes के लिए समर्थन हासिल है, लेकिन उन अजगर regexps (Regular expressions in SQLalchemy queries?)SQLAlchemy + PostgreSQL + पीजी regex

मैं कुछ पंक्तियों से मेल खाते पर regex का उपयोग करने की जरूरत है (एक पंक्ति 1 लॉग लाइन मौजूद है, इसलिए regex एक प्राकृतिक है होने लगते हैं मैच), लेकिन प्रदर्शन के कारणों के मैं this question में, पीजी बैकएंड का उपयोग कर यह करने के लिए पसंद करेंगे जैसे के लिए:

select * from table where name ~ 'foo'; 

मैं कैसे एक क्वेरी में दोनों पीजी कार्यान्वित regex और SQLAlchemy वस्तु चयन गठजोड़ कर सकते हैं?

उत्तर

11

filter() क्वेरी ऑब्जेक्ट की विधि फ़िल्टर के लिए कच्चे एसक्यूएल का उपयोग करने की अनुमति देती है। तो, तुम कर सकते हो ...

Table.query.filter("name ~ 'foo'") 

ध्यान दें कि अगर आप एक तर्क के रूप में इस प्रदान करना चाहते हैं, तो आप text() और उपयोग कर सकते हैं ...

from sqlalchemy.sql import text 

Table.query.filter(text('name ~ :reg')).params(reg='foo') 

क्योंकि हम "रेग" को परिभाषित text() का उपयोग कर फ़िल्टर में बाध्य पैरामीटर, हमें यह सुनिश्चित करना होगा कि हम मान को परिभाषित करें, जिसे हम params() का उपयोग करके कर सकते हैं।

+0

धन्यवाद !! बाध्य पैरामीटर के साथ यह बात भी बहुत उपयोगी है (एसक्यूएल इंजेक्शन और इसी तरह की सुरक्षा के खिलाफ सुरक्षा)। – LetMeSOThat4U

7

ध्यान दें कि आप भी इन्फ़िक्स ऑपरेटर समर्थन का उपयोग कर सकते हैं:

session.query(Table).filter(Table.name.op("~")('foo')) 
संबंधित मुद्दे