2017-09-03 12 views
1

Le code est le suivant (je suis nouveau à Python/Mysql):'tuple' n'a pas d'attribut 'encode'

import mysql.connector 

conn = mysql.connector.connect(host='localhost',user='user1',password='puser1',db='mm') 
cursor = conn.cursor() 
string1 = 'test1' 
insert_query = """INSERT INTO items_basic_info (item_name) VALUES (%s)""", (string1) 
cursor.execute(insert_query) 
conn.commit() 

Quand je lance ce code je reçois cette erreur:

Traceback (most recent call last) 
File "test3.py", line 9, in <module> 
cursor.execute(insert_query) 
File "C:\Users\Emanuele-PC\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\cursor.py", line 492, in execute 
stmt = operation.encode(self._connection.python_charset) 
AttributeError: 'tuple' object has no attribute 'encode' 

J'ai vu différentes réponses à ce problème mais les cas étaient assez différents des miens et je ne pouvais pas vraiment comprendre où je fais des erreurs. Quelqu'un peut-il m'aider?

Répondre

2

Pour avoid SQL-injections Django documentation recommandons l'utilisation complète des espaces réservés comme ça:

import mysql.connector 

conn = mysql.connector.connect(host='localhost',user='user1',password='puser1',db='mm') 
cursor = conn.cursor() 
string1 = 'test1' 
insert_query = """INSERT INTO items_basic_info (item_name) VALUES (%s)""" 
cursor.execute(insert_query, (string1,)) 
conn.commit() 

Vous devez passer tuple/liste params surExécuterdans méthode comme second argument. Et tout devrait bien se passer.