2013-06-11 9 views
9

पर पाइथन वैरिएबल डालें मैं एक पायथन स्क्रिप्ट के भीतर एक MySQL तालिका में एक पायथन वैरिएबल डालने का प्रयास कर रहा हूं लेकिन यह काम नहीं कर रहा है। जब मैं चर नाम उनके वास्तविक संख्यात्मक मूल्यों के साथ result[1,0], result[1,1], और result[1,2] यह काम करता है की जगह यहाँ मेरी कोडMySQL कनेक्टर/पायथन - MySQL तालिका

add_results=("INSERT INTO account_cancel_predictions" 
      "(account_id,21_day_probability,flagged)" 
      "Values(%(account_id)s,%(21_day_probability)s,%(flagged)s)") 

data_result={ 
    'account_id':result[1,0], 
    '21_day_probability':result[1,1], 
    'flagged':result[1,2] 
} 

cursor.execute(add_results,data_result) 

cnx.commit() 
cursor.close() 
cnx.close() 

यह त्रुटि

ProgrammingError: Failed processing pyformat-parameters; 'MySQLConverter' object has no attribute '_float64_to_mysql' 

हालांकि हो जाता है। मुझे संदेह है कि पाइथन उनके मूल्यों के बजाय वास्तविक चर नामों को पार कर रहा है। मैं यह कैसे तय करुं?

+0

कोई भी? ........ – user1893354

+0

कनेक्शन = इंजन.कनेक्ट() कनेक्शन.execute ("" "अपडेट खिलाड़ी गोल्ड = (?) जहां नाम = (?)" "", (सोना, नाम)), शायद सिर्फ एक फैनबॉय चीज है, लेकिन मैं स्क्लेल्चेमी को पायथन के साथ उपयोग करता हूं और इससे अधिक सरलता मिलती है और मुझे इसके साथ वाइल्डकार्ड का उपयोग करने में कोई समस्या नहीं है – theBigChalk

उत्तर

18

मान लिया जाये कि आप mysql.connector उपयोग कर रहे हैं (मुझे लगता है कि आप कर रहे हैं), अपने खुद के कनवर्टर वर्ग को परिभाषित:

class NumpyMySQLConverter(mysql.connector.conversion.MySQLConverter): 
    """ A mysql.connector Converter that handles Numpy types """ 

    def _float32_to_mysql(self, value): 
     return float(value) 

    def _float64_to_mysql(self, value): 
     return float(value) 

    def _int32_to_mysql(self, value): 
     return int(value) 

    def _int64_to_mysql(self, value): 
     return int(value) 

config = { 
    'user' : 'user', 
    'host' : 'localhost', 
    'password': 'xxx', 
    'database': 'db1' 
} 

conn = mysql.connector.connect(**config) 
conn.set_converter_class(NumpyMySQLConverter) 
+1

अच्छा समाधान! हालांकि, मुझे काम करने के लिए '__init__' फ़ंक्शन शामिल करना था। यह मेरे संस्करण की वजह से हो सकता है। मैंने ''.py.py' में मूल 'MySQLConverter' वर्ग के समान कुछ उपयोग किया। – regeirk

3

आपके पास किए गए मानों में से एक numpy.float64 प्रकार का हो सकता है जो MySQL कनेक्टर द्वारा मान्यता प्राप्त नहीं है। इसे धक्का देने पर इसे वास्तविक पायथन float पर कास्ट करें।

0

आप अजगर 3 पर हैं और इसके बाद के संस्करण, बस mysqlclient pip install mysqlclient का उपयोग करते हैं। यह django द्वारा अनुशंसित है और अन्य सभी ड्राइवर खराब हैं।