2015-01-22 2 views
0

У меня есть следующее сообщение об ошибке:Python вставить ошибки юникода SQL

db = MySQLdb.connect(host="localhost", # host 
       user="root", # username 
        passwd="", # password 
        db="test",charset='utf8') # 

    cur = db.cursor() 
    x = "испытание" # random unicode characters 
    sql = "INSERT INTO links(test) VALUES(N'%s');" 
    lst = (x) #x is unicode data 
    cur.execute(sql,lst) 

Я получаю ошибку является: MySQL Error [1064]: У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса ...

ответ

0

какое значение вы пытаетесь вставить? ничего. что представляет собой N '% s'. Я думаю, вы пытаетесь вставить из формы, поэтому я работаю над этим кодом, тестировал его и запускал. Сначала создайте базу данных с двумя столбцами employee_id и lastname. Затем проверьте этот код. он будет работать для вас. Если вы это исправите, отметьте это как ответ. Sectona ...

#!c:/python25/python 

import MySQLdb 

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# get form data from form field 

employee_id = form.getvalue('employee_id') 
lastname = form.getvalue('lastname') 



# Open database connection 
db = MySQLdb.connect("localhost","sectona","sectona90","sectona_db") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 


sql = "INSERT INTO EMPLOYEE(employee_id, \ 
     lastname) \ 
     VALUES ('%s', '%s')" % \ 
     (employee_id, lastname) 

try: 
    # Execute the SQL command 
    cursor.execute(sql) 
    # Commit your changes in the database 
    db.commit() 
except: 
    # Rollback in case there is any error 
    db.rollback() 

# disconnect from server 
db.close() 
print "Content-type:text/html\r\n\r\n" 
print '<html>' 
print '<body>' 
print '<h2>Data Submitted Successfully</h2>' 
print "<b>Employee Identity:</b> %s<br>" % (employee_id) 
print "<b>Last Name:</b> %s<br>" % (lastname) 

print '</body>' 
print '</html>' 
+0

Примечание. Этот код страдает от SQL-инъекции. Предпочитаете использовать параметризованные запросы. Также HTML-инъекция (XSS). – bobince

1
x = "испытание" # random unicode characters 

(версия Что Python вы используете? Если 2.x, те не Unicode символов, они байты.)

sql = "INSERT INTO links(test) VALUES(N'%s');" 

Когда вы используете параметризируетесь запросов, вы не включаете строковые литералы с разделителями ''. Для MySQLdb, где маркер параметра является %s, оно должно быть просто:

sql = "INSERT INTO links(test) VALUES(%s);" 

(Обратите внимание также NVARCHAR ненужно в MySQL.)

lst = (x) #x is unicode data 

Здесь lst такое же значение, как x, вы еще» t получил кортеж. Если вы действительно хотите кортеж-одного, тогда скажите (x,), но, вероятно, используя фактический список [x] понятнее.

+0

Вы пробовали? Я получаю ту же ошибку unicode – Alessandro

+0

Вы упомянули только ошибку синтаксиса, что такое ошибка Unicode? Если MySQL жалуется на искаженный UTF-8, и это Python 2, то, вероятно, ваш исходный файл не сохраняется как UTF-8, поэтому строка байта, переданная ему, не может быть прочитана. – bobince