2013-06-11 43 views
9

Tôi đang cố gắng chèn một biến python vào bảng MySQL trong một tập lệnh python nhưng nó không hoạt động. Đây là mã của tôiKết nối MySQL/Python - chèn biến python vào bảng 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() 

này được lỗi

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

Tuy nhiên, khi tôi thay thế các tên biến result[1,0], result[1,1], và result[1,2] với giá trị số thực tế của họ nó làm việc. Tôi nghi ngờ python là đi qua các tên biến thực tế chứ không phải là các giá trị mà họ nắm giữ. Làm thế nào để sửa lỗi này?

+0

Bất kỳ ai? ........ – user1893354

+0

kết nối = engine.connect() kết nối.execute ("" "cập nhật Người chơi đặt Vàng = (?) Trong đó Tên = (?)" "", (Vàng, tên)), có lẽ chỉ là một điều fanboy nhưng tôi có xu hướng sử dụng sqlalchemy với python và điều này có xu hướng đơn giản hóa nhiều điều này và tôi đã không bao giờ có vấn đề bằng cách sử dụng ký tự đại diện với nó – theBigChalk

Trả lời

18

Giả sử bạn đang sử dụng mysql.connector (Tôi nghĩ rằng bạn đang có), xác định lớp chuyển đổi của riêng bạn:

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

Giải pháp tốt đẹp! Tuy nhiên, tôi phải bao gồm một hàm '__init__' để nó hoạt động. Có thể là do phiên bản của tôi. Tôi đã sử dụng một cái gì đó tương tự như lớp 'MySQLConverter' gốc trong' conversion.py'. – regeirk

3

Một trong các giá trị đã vượt qua của bạn có thể thuộc loại numpy.float64 không được nhận dạng bởi trình kết nối MySQL. Đưa nó vào một con trăn chính hãng float khi điền vào dict.

0

Nếu bạn đang ở trên python 3 trở lên, chỉ cần sử dụng mysqlclient pip install mysqlclient. Đó là khuyến cáo của django và tất cả các trình điều khiển khác là xấu.

Các vấn đề liên quan