2013-06-11 3 views
9

Я пытаюсь вставить переменную python в таблицу MySQL в сценарии python, но она не работает. Вот мой кодMySQL Connector/Python - вставьте переменную python в таблицу 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' 

Однако, когда я заменяю имена переменных result[1,0], result[1,1] и result[1,2] с их фактическими числовыми значениями она работает. Я подозреваю, что python передает фактические имена переменных, а не значения, которые они хранят. Как это исправить?

+0

Кто-нибудь? ........ – user1893354

+0

connection = engine.connect() connection.execute ("" "update Players set Gold = (?) Где Name = (?)" "", (Gold, имя)), может быть, просто фанат, но я склонен использовать sqlalchemy с python, и это имеет тенденцию упрощать большую часть этого, и у меня никогда не было проблем с использованием подстановочных знаков с ним. – 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__', чтобы она работала. Возможно, это из-за моей версии. Я использовал что-то похожее на исходный класс 'MySQLConverter' в' conversion.py'. – regeirk

3

Одно из ваших переданных значений может быть типа numpy.float64, которое не распознается соединителем MySQL. Направьте его на подлинный python float на заполнение dict.

0

Если вы на Python 3 и выше, просто используйте mysqlclient pip install mysqlclient. Это рекомендуется django, и все остальные драйверы плохие.

Смежные вопросы