2012-11-13 2 views
2

Я не могу найти решение. Можете ли вы помочь мне с этим вопросом, пожалуйста?(Python MySQLdb) при попытке вставить UTF-8 в MySQL

dic={'username':u'\uc774\ud55c\ub098','userid':u'david007', 'nation':u'\ub300\ud55c\ubbfc\uad6d'} 
    c=MySQLdb.connect(host=ddb['host'],user=ddb['user'],passwd=ddb['passwd'],db=ddb['db'], use_unicode=True, charset="utf8") 
    s=c.cursor() 
    sql="INSERT INTO "+db+" "+col+" VALUES "+str(tuple(dic.values())) 
    s.execute(sql) 

    "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\\uc774\\ud55 ... at line 1") 

    print sql 
    INSERT INTO user_tb (username, userid, nation) VALUES (u'\uc774\ud55c\ub098', u'david007', u'\ub300\ud55c\ubbfc\uad6d') 

И ошибка:

+1

Это даже не действительный код Python. Можете ли вы включить курсор '.execute()' call, как указано в вашем коде? Похоже, вы смешиваете свой синтаксис строкового литерала в python, но я хочу, чтобы это было подробно. –

+0

спасибо, обновил мой вопрос – user1161599

+0

добавить одинарные кавычки к значениям, возможно, – nkamm

ответ

4

Вы должны использовать параметрический запрос:

sql = "INSERT INTO " + db + " " + col + " VALUES (%s, %s, %s)" 
s.execute(sql, dic.values()) 

Когда вы просто сцепить кортеж на Ваш запрос, то u префикса строк Юникода сделает эти строки недействительны SQL. С параметрами MySQLdb, вы сделаете правильную вещь с заменой параметра (то есть кодируете строки Unicode в байтовое представление) и сгенерируете правильный SQL.

В любом случае, как правило, вы должны всегда использовать параметры в своих запросах, чтобы предотвратить инъекции SQL.

+0

user1161599 @ Вы поставили коды с экранированным кодом Python, такие как 'u '\ uc774 \ ud55c \ ub098'', в SQL, но база данных не понимает тип экранирования типа Python и' u 'префикс. Обратите внимание, что «Perdo» правильно не использует синтаксический анализ строк в строке SQL вообще, потому что он будет уязвим для атаки SQL-инъекции. Он использует параметры. – hynekcer

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