2016-06-07 71 views
-1

在通过python MySQLdb插入SQL语句时遇到一个奇怪的问题。Python 2.7使用unicode进行MySQL查询

这里是我的查询和执行结果

mydb = MySQLdb.connect(host = 'localhost', user = 'root', passwd = 'root', db = 'test', use_unicode=True, charset = 'utf8') 
cursor = mydb.cursor() 


my_query = u""" 
INSERT IGNORE INTO test.testtable 
(`CompanyName`, `Ticker`, `Date`) 
VALUES ("%s", "%s", "%s"); 
""" 

cursor.execute(my_query, (companyname, ticker, date)) 

此代码运行正常,如果变量公司/股票/日期没有Unicode字符。但是,如果我得到任何Unicode字符,则不会执行sql语句。

如果我打印出各个变量的值,它们是正确的,即使是unicode字符串。如果我不使用变量传递SQL语句,下面的语句也可以工作:

cursor.execute("INSERT IGNORE INTO test.testtable (`CompanyName`, `Ticker`, `Date`) VALUES (u"公司", u"代码", u"日期");") 

但是,如果我尝试使用格式化%,然后我碰到的问题:

print my_query % (companyname, ticker, date) 

给以下例外:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 

所以我的问题是如何插入SQL语句使用可能有unicode字符串的变量。我感觉旧%格式化是这里的问题,但我无法找到如何使用.format()格式化程序来传递SQL语句。

谢谢

回答

0

Notes on utf8 in Python。也许,主要陈述有

在源代码中的第1或第2行(有代码UTF8编码的文字):

# -*- coding: utf-8 -*- 
+0

我确实有这条线在那里,这就是为什么我的打印作品。但是如果我使用%格式化程序,它将停止工作 – HappyBambi