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

psycopg2 कर्सर.execute () SQL क्वेरी पैरामीटर के साथ सिंटैक्स त्रुटि का कारण बनता है

मेरा मानना ​​है कि इस तरह के पैरामीट्रिज्ड स्टेटमेंट का उपयोग मानों . के साथ किया जाना है और तालिका के नाम (या SQL कीवर्ड, आदि) नहीं। तो आप मूल रूप से इसके साथ भाग्य से बाहर हैं।

हालांकि, चिंता न करें, क्योंकि यह तंत्र SQL इंजेक्शन को रोकने के लिए है, और आप सामान्य रूप से जानते हैं कि आप कोड-लेखन के समय किस तालिका तक पहुंचना चाहते हैं, इसलिए इस बात की बहुत कम संभावना है कि कोई व्यक्ति दुर्भावनापूर्ण कोड को इंजेक्ट कर सकता है। बस आगे बढ़ें और तालिका को स्ट्रिंग में लिखें।

यदि, किसी (संभवतः विकृत) कारण से आप तालिका का नाम पैरामीट्रिक इस तरह रखते हैं:

  1. यदि तालिका का नाम आपके प्रोग्राम से आता है (उदाहरण के लिए एक शब्दकोश, या वर्ग विशेषता), तो सामान्य स्ट्रिंग प्रतिस्थापन करें।
  2. यदि तालिका का नाम बाहरी दुनिया से आता है ("उपयोगकर्ता इनपुट" सोचें):या तो ऐसा न करें, या उपयोगकर्ता पर पूरी तरह से भरोसा करें और पिछले दृष्टिकोण 1 को लागू करें।

उदाहरण के लिए:

cursor.execute(
    'SELECT * FROM %s where %s = %s'
    % ("my_table", "colum_name", "%s"), #1
    ("'some;perverse'string;--drop table foobar")) #2

#1 :तीसरे %s को इस समय दूसरे '%s' से बदलने दें, ताकि बाद में psycopg2#2 द्वारा संसाधित किया जा सके :यह वह स्ट्रिंग है जिसे psycopg2 द्वारा ठीक से उद्धृत किया जाएगा और उस तीसरे '%s' के बजाय मूल स्ट्रिंग में रखा जाएगा



  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 त्रुटि:INSERT में अभिव्यक्तियों की तुलना में अधिक लक्ष्य स्तंभ होते हैं, जब यह नहीं होता है

  5. PostgreSQL अद्वितीय अनुक्रमणिका और स्ट्रिंग केस