-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语句。
谢谢
我确实有这条线在那里,这就是为什么我的打印作品。但是如果我使用%格式化程序,它将停止工作 – HappyBambi