python 2.7 - Why psycopg2 placeholders acts differently on different Linux machines? -


मेरे पास एक कोड स्निपेट है:

  हैशड = हैशिलिब.शा 1 (कुछ_value) .hexdigest , "" cursor.execute (डालने, [टुकड़ों में बांटा, () "(dimensions_hash_id, dimensions_string) dimensions_hash में डालने का चयन एक्स% s% s जहां मौजूद नहीं है (dimensions_hash कहां dimensions_hash_id = एक्स% s से 1 का चयन करें)" = "" सम्मिलित some_value, टुकड़ों में बांटा])  

<कोड> dimensions_hash_id है बीआईटी (160) टाइप

Ubuntu (14.04, पायथन 2.7.6, psycopg पर (2.5 .2), पोस्टग्रेज़ (9.3)) यह अपेक्षा के अनुरूप काम करता है प्लेसहोल्डर को उद्धृत स्ट्रिंग में विस्तारित किया जाता है, एक्स '' शब्दशः इस स्ट्रिंग को हेक्साडेसिमल मान के रूप में व्यवहार करने की अनुमति देता है जो पोस्टग्रेस बीआईटी (160) फ़ील्ड में फिट हो सकते हैं।

हालांकि, CentOS (6.5, Python 2.7.6) स्रोतों से निर्माण प्रकार "XE" लाइन मौजूद नहीं है:, psycopg (2.5.2), postgres (9.3)) psycopg ई से पहले उद्धृत स्ट्रिंग जो यह स्ट्रिंग बच गए है और मैं ट्रैस बैक

  ProgrammingError हो रही है इसका मतलब है कहते हैं 3: SELECT xE'd57789a80870ccc0c6d65b5a844091a06e6850 ...  

ई जोड़ने से कैसे बचें? मैं psycopg2.estensions.AsIs प्रयोग किया है:

  psycopg2.extensions से असीस आयात # ... टुकड़ों में बांटा = असीस (hashlib.sha1 (some_value) .hexdigest ()) # ...   

लेकिन मैं एसक्यूएल बयान <कोड को expaned मिल गया है> xd57789a80870ccc0c6d65b5a844091a06e6850 ... का चयन करें बोली जो त्रुटि है कि कोड <में जो परिणाम के बिना> xd57789a80870ccc0c6d65b5a844091a06e6850 स्तंभ मौजूद नहीं है।

मैं भी कोशिश की है

  टुकड़ों में बांटा = असीस (hashlib.sha1 (some_value) .hexdigest ())। getquoted ()  
<

लेकिन बच शाब्दिक ई फिर से दिखाई।

क्या इस समस्या के लिए कोई सुंदर, पोर्टल समाधान है?

शायद अंतर यह है कि आपके पास CentOS मशीन पर standard_conforming_strings सेट बंद है

इसलिए, इसे पर पर सेट करना आपकी समस्या को हल करेगा क्योंकि psycopg स्ट्रिंग के सामने ई नहीं जोड़ देगा। यदि आपको वास्तव में इसकी आवश्यकता है, तो आप संभवत: अपने हेक्सागेंगेट को 160 बाइट '1011 ...' में परिवर्तित कर सकते हैं- अजगर में स्ट्रिंग और उपयोग करें SELECT% s :: bit (160),% s इसके बदले, लेकिन यह बदसूरत है।


Comments

Popular posts from this blog

import - Python ImportError: No module named wmi -

Editing Python Class in Shell and SQLAlchemy -

c# - MySQL Parameterized Select Query joining tables issue -