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

Psycopg2 प्लेसहोल्डर्स के साथ तालिका में सम्मिलित करें

आप पायथन स्ट्रिंग स्वरूपण का उपयोग कर रहे हैं और यह एक बहुत बुरा विचार (टीएम) है। एसक्यूएल-इंजेक्शन सोचो। इसे करने का सही तरीका बाध्य चरों का उपयोग करना है:

cur.execute('INSERT INTO %s (day, elapsed_time, net_time, length, average_speed, geometry) VALUES (%s, %s, %s, %s, %s, %s)', (escaped_name, day, time_length, time_length_net, length_km, avg_speed, myLine_ppy))

जहां पैरामीटर के टपल को दूसरे तर्क के रूप में दिया जाता है execute() . इसके अलावा आपको किसी भी मूल्य से बचने की जरूरत नहीं है, psycopg2 आपके लिए भागने का काम करेगा। इस विशेष मामले में तालिका नाम को एक चर (escaped_name में पास न करने का भी सुझाव दिया गया है। ) लेकिन इसे क्वेरी स्ट्रिंग में एम्बेड करने के लिए:psycopg2 नहीं जानता कि तालिका और कॉलम नामों को कैसे उद्धृत किया जाए, केवल मान।

psycopg2 दस्तावेज़ देखें:

https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries

यदि आप SQL स्टेटमेंट को प्रोग्रामेटिक रूप से जेनरेट करना चाहते हैं, तो प्रथागत तरीका स्टेटमेंट के लिए पायथन फॉर्मेटिंग और तर्कों के लिए वेरिएबल बाइंडिंग का उपयोग करना है। उदाहरण के लिए, यदि आपके पास escaped_name . में तालिका का नाम है आप यह कर सकते हैं:

query = "INSERT INTO %s (col1, ...) VALUES (%%s, ...)" % escaped_name
curs.execute(query, args_tuple)

जाहिर है, अपनी क्वेरी में प्लेसहोल्डर्स का उपयोग करने के लिए आपको किसी भी % . को उद्धृत करना होगा जो पहले प्रारूप में एक बाध्य तर्क पेश करता है।

ध्यान दें कि यह सुरक्षित है अगर और केवल अगर escaped_name आपके कोड द्वारा किसी बाहरी इनपुट (उदाहरण के लिए एक टेबल बेस नाम और एक काउंटर) को अनदेखा करते हुए उत्पन्न होता है, लेकिन यदि आप उपयोगकर्ता द्वारा प्रदान किए गए डेटा का उपयोग करते हैं तो यह 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. JSON पर PostgreSQL इंडेक्स

  2. SQLAlchemy - परीक्षण के लिए SQLite और विकास के लिए Postgresql - पोर्ट कैसे करें?

  3. PostgreSQL में दो डेटाबेस के बीच डेटा की तुलना कैसे करें?

  4. पोस्टग्रेज स्थानीय विकास डीबी में हेरोकू प्रोडक्शन डीबी की प्रतिलिपि बनाते हैं

  5. एक शुरुआत के लिए, क्या MySQL और PostgreSQL के बीच बहुत अंतर है