2011-07-15 12 views
5

का उपयोग कर विशेष वर्णों से बचने के लिए मैं mySQL में फ़ाइल नाम और फ़ाइलपाथ संग्रहीत कर रहा हूं। LIKE अभिव्यक्ति का उपयोग करके डेटाबेस से उन्हें पुनर्प्राप्त करने के लिए आवश्यक है कि मैं mysql विशेष वर्णों के साथ टकराए गए सभी अनुमत फ़ाइल नामों से बचें। मुझे आसानी से पाइथन की स्ट्रिंग.रेप्लेस() विधि का उपयोग करने में प्रसन्नता हो रही है, लेकिन यह सोच रहा था कि क्या SQLalchemy के साथ फ़ाइलपैथ को स्वच्छ करने या सामान्य रूप से mySQL में फ़ाइलपैथ से निपटने की अधिक मानक या अंतर्निहित विधि थी।sqlalchemy

संपादित करें: थोड़ा और जानकारी। मुझे ओएस-अज्ञेयवादी और स्थापित होने के समाधान की आवश्यकता है। इसे एसए में लागू करने की आवश्यकता नहीं है। मैं काम करता है एन्कोडिंग के लिए किसी भी प्रक्रिया को स्वीकार करेंगे। इसे सहेजते हुए, मुझे उन सभी वर्णों की एक सूची की आवश्यकता है जिन्हें बचने की आवश्यकता है और बचने वाले चार की स्मार्ट पसंद है।

उत्तर

-2

आपको फ़ाइल पथ से बचने की आवश्यकता क्यों है? जहां तक ​​आप मैन्युअल रूप से चयन/सम्मिलित प्रश्नों को लिख नहीं रहे हैं, तब तक एसक्यूएलकेमी आंतरिक रूप से क्वेरी उत्पन्न करते समय भागने का ख्याल रखेगा।

फ़ाइल पथ को डेटाबेस में डालने के रूप में डाला जा सकता है।

+1

मैं फ़ाइलपैथ का चयन करने के लिए '.like()' SA विधि का उपयोग कर रहा हूं। जो (जैसा कि मैं समझता हूं) वाइल्डकार्ड के रूप में '%' और '_' (क्या अन्य हैं?) का उपयोग करता है। दोनों वैध filname chrs भी हैं। एसए निश्चित रूप से अजीब होगा अगर एसए मेरे दिमाग को पढ़ सके और जान सके कि जब मैं एक फाइलनाम में एक शाब्दिक चार बनाम एक खोज वाइल्डकार्ड बनाम '_' का उपयोग कर रहा था और मेरे लिए" ख्याल रखना "! :) – Paul

+0

@Toofan: पॉल सही है: SQLAlchemy '.like()' और वाणिज्य ('.contains()', '.startswith()' आदि ...) के लिए ऐसा नहीं करेगा। यह इन विधियों के लिए 'एस्केप' तर्क प्रदान करता है, लेकिन आपको स्वयं स्ट्रिंग से बचना होगा, और प्रयुक्त बचने का पात्र प्रदान करना होगा। – Steven

0

यदि आप नियमित प्रश्नों का उपयोग करेंगे तो SQLAlchemy आपके लिए sanitize करते हैं। शायद समस्या जो आप खंड की तरह उपयोग करते हैं। इस तरह के प्रतीकों के लिए अतिरिक्त भागने की आवश्यकता है: _%। इस प्रकार यदि आप अभिव्यक्ति की तरह उद्धरण देना चाहते हैं तो आपको विधियों को प्रतिस्थापित करने की आवश्यकता होगी।

+0

तथ्य यह है कि मैं '.like()' का उपयोग करता हूं, समस्या नहीं है, यह मुख्य आवश्यकता है। क्या मुझे केवल '%' और '_' से बचने की ज़रूरत है? शाब्दिक उद्धरण, ब्रैकेट, और बैकस्लाश को कैसे संभालें? – Paul

+0

आपको केवल 3 वर्ण, _,%,/से बचने की आवश्यकता है। _ और% वाइल्डकार्ड हैं,/- बचने का प्रतीक। क्वेरी के अन्य भाग को स्वचालित रूप से – varela

0

आपको कुछ भी करने की आवश्यकता नहीं है SQLAlchemy यह आपके लिए करेगा।

+0

को यहां पर टिप्पणियां पढ़ी जाएंगी: http://stackoverflow.com/questions/6713715/escaping-special-characters-using-sqlalchemy/6720094#6720094 – Paul

+0

तो आपको अपने से बचने का कार्य स्वयं लिखना होगा : path.replace ('%', '\\%')। प्रतिस्थापित करें ('_', '\\ _') –

+0

या आप इस प्रकार एसक्यूएल का उपयोग कर सकते हैं: तालिका से * चुनें जहां 'एंड्रे *%' से बचें '*'; –

-3

जैसा कि मुझे पता है कि आप SQLAlchemy में जो खोज रहे हैं वह नहीं है। अपने आप से basestring.replace() विधि पर जाएं।

+1

हां। मुझे पता है। मैं कहता हूं कि मेरे प्रश्न में। मुझे क्या बदलना चाहिए?'*' और '\' वैध लिनक्स फ़ाइल नाम नहीं है? क्या मुझे कुछ मानक एन्कोडिंग का उपयोग नहीं करना चाहिए? मैंने एक यूआरएल-एन्कोड करने पर विचार किया है, लेकिन एक% के बजाय बच निकला या डबल-% के साथ, लेकिन यह जल्दी गन्दा हो जाता है। मैं एक स्थापित समाधान की तलाश में हूं। – Paul