2010-11-20 14 views
13

क्या Pygon में None एक चर है जब NULL कुंजी मानों को PostgreSQL डेटाबेस में दर्ज करने के लिए कोई अच्छा अभ्यास है?पायथन का उपयोग करके PostgreSQL डेटाबेस में 'NULL' मानों को कैसे सम्मिलित करें?

इस क्वेरी चल रहा है: एक एक TypeError अपवाद में

mycursor.execute('INSERT INTO products (user_id, city_id, product_id, quantity, price) VALUES (%i, %i, %i, %i, %f)' %(user_id, city_id, product_id, quantity, price)) 

परिणाम जब user_idNone है।

NULL ड्राइवर का उपयोग कर None पर कोई मान डेटाबेस में डाला जा सकता है?

+0

कौन सा डीबी एपीआई अनुकूलक आप उपयोग कर रहे हैं? डीबी-एपीआई एडाप्टर द्वारा –

+0

मुझे लगता है कि आपका मतलब डीबी इंटरफ़ेस psycopg2 है। यदि नहीं, तो क्या आप अधिक विशिष्ट हो सकते हैं? – xpanta

उत्तर

27

डेटाबेस के लिए शून्य मान सम्मिलित करने के लिए आपके पास दो विकल्प हैं:

  1. न आना अपने सम्मिलित बयान से कि क्षेत्र, या
  2. उपयोग None

इसके अलावा: एसक्यूएल इंजेक्शन से बचाव करने के लिए आपको अपने प्रश्नों के लिए सामान्य स्ट्रिंग इंटरपोलेशन का उपयोग नहीं करना चाहिए।

आप execute() के दो (2) तर्क पास करना चाहिए उदा .:

mycursor.execute("""INSERT INTO products 
        (city_id, product_id, quantity, price) 
        VALUES (%s, %s, %s, %s)""", 
       (city_id, product_id, quantity, price)) 

वैकल्पिक # 2:

user_id = None 
mycursor.execute("""INSERT INTO products 
        (user_id, city_id, product_id, quantity, price) 
        VALUES (%s, %s, %s, %s, %s)""", 
       (user_id, city_id, product_id, quantity, price)) 
+0

धन्यवाद। क्या आप मुझे कहीं कहीं इंगित कर सकते हैं ताकि मैं पढ़ सकूं कि पायथन में स्ट्रिंग इंटरपोलेशन एसक्यूएल इंजेक्शन का कारण बन सकता है। यह बहुत दिलचस्प है और मैंने इसके बारे में सोचा नहीं है। – xpanta

+2

आपका स्वागत है। यह अच्छी तरह से वर्णन करता है कि एसक्यूएल इंजेक्शन हमले क्या हैं: http://en.wikipedia.org/wiki/SQL_injection यह स्ट्रिंग इंटरपोलेशन से कैसे संबंधित है ?: कहें कि आपको अपने प्रोग्राम में अविश्वसनीय इनपुट प्राप्त होता है। उस इनपुट में, उदाहरण के लिए, एक 'ड्रॉप तालिका' कमांड हो सकता है। – bernie

+0

मैं कॉलम मान के लिए कोई भी नहीं उपयोग कर रहा हूं लेकिन एक त्रुटि प्राप्त करें: प्रोग्रामिंग त्रुटि: कॉलम "कोई नहीं" मौजूद नहीं है लाइन 1: ... 01.00-ng20 ', report_date =' 2016-03-30 ', ec_enabled = कोई नहीं, ec_s ... यहां मूल क्वेरी है जो असफल हो रही है: अद्यतन kw_daily_data_mart SET hostname = 'ctrlkey.com', users_licensed = 7, licensed_users = 10, sw_version = 'kw2016.01.00-ng20', report_date = '2016- 03-30 ', ec_enabled = कोई नहीं, ec_server_count = 1, config_max_file_version = 10, av_enabled = True, location_count = 1, sso_enabled = झूठा जहां ग्राहक_आईडी = 127892 और installation_id = 3585 और hostname =' ctrlkey.com 'वापसी आईडी –