2010-11-06 13 views
20

क्या session.query(MyObject).filter_by(REGEX) के समान तरीके से एक रेगेक्स का उपयोग करना संभव है?SQLalchemy प्रश्नों में नियमित अभिव्यक्तियां?

यदि नहीं, तो मैं SQLAlchemy कैसे उपयोग कर सकते हैं रिकॉर्ड है कि एक varchar पी एक निश्चित मूल्य के साथ शुरुआत को पुनः प्राप्त करने (उन सभी जिसका शहर क्षेत्र "एसए" के साथ शुरू होता उदा)? धन्यवाद।

+1

ओरेकल का उपयोग कर, तो आप इस सवाल का जवाब http://stackoverflow.com/a/14750641/269834 –

उत्तर

23

मुझे लगता है कि मुझे मिल गया:

session.query(Object).filter(Object.column.op('regexp')(REGEX)) 
+8

यह उत्तर केवल MySQL में काम करेगा, जो तुलनात्मक ऑपरेटर के रूप में 'REGEXP' का उपयोग करता है। आपको इसे अन्य डेटाबेस में बदलना होगा, और यह केवल तभी काम करेगा यदि डेटाबेस में नियमित अभिव्यक्ति तुलना ऑपरेटर (उदाहरण के लिए, एक फ़ंक्शन के विपरीत) है। PostgreSQL में, आप 'op (' ~ ') 'का उपयोग कर सकते हैं। –

3

[अस्वीकरण: कोई regex]

मैं सवाल का जवाब दे रहा हूँ क्योंकि इस सरल उपयोग के मामले में LIKE शायद के लिए "मैं कैसे SQLAlchemy रिकॉर्ड एक varchar पी एक निश्चित मूल्य के साथ शुरुआत की है कि पुनः प्राप्त करने के लिए उपयोग कर सकते" दोनों कम महंगे और अधिक पोर्टेबल हैं (नियमित अभिव्यक्तियों के लिए पूछना the XY Problem के प्रकटन की तरह लगता है)।

SQLAlquemy में (एलेक्स से उधार):

session.query(Object).filter(Object.column.like('something%')) 

SqlSoup में मैं का उपयोग करें:

db.table.filter(db.table.column.like('something%')) 
+2

का उपयोग करना चाहेंगे क्यों downvote? "कुछ" के साथ शुरू होने वाली स्ट्रिंग के लिए परीक्षण करने के लिए एक रेगेक्स स्पष्ट रूप से ओवरकिल है। साथ ही, प्रत्येक डेटाबेस में देशी regex समर्थन नहीं है लेकिन प्रत्येक SQL डेटाबेस "जैसे" कथन का समर्थन करता है - सर्वर साइड ऑपरेशंस हमेशा बेहतर होते हैं। –

+0

क्योंकि "पसंद" regexp से कम शक्तिशाली तरीका है ... – Sylvestre

+1

@Sylvestre ... और रास्ता अधिक महंगा और कम पोर्टेबल। –

3

रिकॉर्ड के लिए, आप कर सकते हैं एसक्लाक्लेमी में पाउलो स्कार्डिन के जवाब के रूप में अनिवार्य रूप से वही वाक्यविन्यास करें;

session.query(Object).filter(Object.column.like('something%')) 
+0

डाउनवोट क्यों? * सचमुच * मैं जो कुछ कर रहा हूं वह एक अन्य उत्तर का वर्णन करने के लिए एक एसक्लाक्लेमी अनुवाद प्रदान कर रहा है। मैं दावा नहीं कर रहा हूं कि यह बेहतर है, या यहां तक ​​कि जिस उत्तर का मैं अनुवाद कर रहा हूं वह सबसे अच्छा समाधान है। अगर कुछ गलत टिप्पणी और सही है (और वहां भी हो सकता है), लेकिन मनमाने ढंग से donwvote नहीं है! – Alex

+1

यह एक 'जैसा' है, प्रश्न में पूछे जाने पर 'रेगेक्स' नहीं। –

संबंधित मुद्दे