(Python MySQLdb)尝试将UTF-8插入MySQL时

(Python MySQLdb)尝试将UTF-8插入MySQL时,python,mysql,utf-8,Python,Mysql,Utf 8,我找不到解决办法。 你能帮我回答这个问题吗 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")

我找不到解决办法。 你能帮我回答这个问题吗

    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')

错误是:

您需要使用参数化查询:

sql = "INSERT INTO " + db + " " + col + " VALUES (%s, %s, %s)"
s.execute(sql, dic.values())
当您将元组连接到查询时,unicode字符串的
u
前缀将使这些字符串无效。使用参数MySQLdb,将正确地进行参数替换(即将unicode字符串编码为字节表示),并生成有效的SQL


无论如何,作为一般原则,您应该在查询中始终使用参数来防止SQL注入。

您需要使用参数化查询:

sql = "INSERT INTO " + db + " " + col + " VALUES (%s, %s, %s)"
s.execute(sql, dic.values())
当您将元组连接到查询时,unicode字符串的
u
前缀将使这些字符串无效。使用参数MySQLdb,将正确地进行参数替换(即将unicode字符串编码为字节表示),并生成有效的SQL


无论如何,作为一般原则,您应该在查询中始终使用参数来防止SQL注入。

这甚至不是有效的Python代码。是否可以按照代码中的说明包含游标
.execute()
调用?看起来你把你的python字符串文字语法混在一起了,但我想看看这是细节。给值加上单引号可能是无效的python代码。是否可以按照代码中的说明包含游标
.execute()
调用?看起来你把你的python字符串文字语法混在一起了,但我想看一下细节。给值加上单引号可能是user1161599@你确实把python转义代码如
u'\uc774\ud55c\ub098'
放入了SQL,但数据库不理解转义的python类型和
u
前缀。请注意,“Perdo”根本不正确地将字符串解析为SQL字符串,因为它容易受到SQL注入攻击。他使用parameters.user1161599@You确实将Python转义代码(如
u'\uc774\ud55c\ub098'
)放入了SQL,但数据库不了解转义的Python类型和
u
前缀。请注意,“Perdo”根本不正确地将字符串解析为SQL字符串,因为它容易受到SQL注入攻击。他使用参数。