PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Psycopg2 अजगर पुस्तकालय के साथ SQL गतिशील क्वेरी का निर्माण करें और अच्छे रूपांतरण प्रकार के टूल का उपयोग करें

आप एक टेबल नाम को पैरामीटर के रूप में पास करने का प्रयास कर रहे हैं। आप शायद इसे तुरंत देख सकते थे यदि आपने अभी-अभी PostgreSQL त्रुटि लॉग को देखा होता।

जिस तालिका नाम को आप psycopg2 से एक पैरामीटर के रूप में पास करने का प्रयास कर रहे हैं, वह बच निकला जा रहा है, जैसे:

INSERT INTO E'my_table'(name, url, id, point_geom, poly_geom) VALUES (E'ST_GeomFromText(''POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))'',4326)');'

यह आपका इरादा नहीं है और यह काम नहीं करेगा; आप एक टेबल नाम से शाब्दिक की तरह बच नहीं सकते हैं। डायनामिक एसक्यूएल बनाने के लिए आपको सामान्य पायथन स्ट्रिंग इंटरपोलेशन का उपयोग करना चाहिए, आप केवल वास्तविक शाब्दिक मूल्यों के लिए पैरामीटरयुक्त स्टेटमेंट प्लेसहोल्डर का उपयोग कर सकते हैं।

params = ('POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)
escaped_name = name.replace('"",'""')
curs.execute('INSERT INTO "%s"(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%%s,%%s));' % escaped_name, params)

देखें कि मैंने क्वेरी स्ट्रिंग बनाने के लिए सीधे नाम को कैसे प्रक्षेपित किया है:

INSERT INTO my_table(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%s,%s));

(%% सादे % . में परिवर्तित हो जाता है % प्रतिस्थापन द्वारा)। फिर मैं उस क्वेरी का उपयोग POLYGON . को परिभाषित करने वाली स्ट्रिंग के साथ कर रहा हूं और दूसरा तर्क ST_GeomFromText क्वेरी पैरामीटर के रूप में।

मैंने इसका परीक्षण नहीं किया है, लेकिन यह आपको सही विचार देगा और यह समझाने में मदद करेगा कि क्या गलत है।

अत्यंत सावधान रहें इस तरह स्ट्रिंग इंटरपोलेशन करते समय, यह SQL इंजेक्शन के लिए एक आसान तरीका है। मैंने ऊपर दिखाए गए कोड में बहुत कच्चा उद्धरण दिया है, लेकिन यदि आपकी क्लाइंट लाइब्रेरी एक प्रदान करती है तो मैं एक उचित पहचानकर्ता उद्धरण फ़ंक्शन का उपयोग करना चाहता हूं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में ग्रेटेस्ट () फ़ंक्शन

  2. दूसरी तालिका में संख्या के आधार पर एक तालिका में एकाधिक पंक्तियाँ सम्मिलित करें

  3. कैसे PostgreSQL का उपयोग कर तालिका नाम से स्तंभ विशेषताएँ क्वेरी प्राप्त करने के लिए?

  4. PostgreSQL के लाभ

  5. इनपुट फ़ाइल एक टेक्स्ट प्रारूप डंप प्रतीत होती है। कृपया psql . का उपयोग करें