从MySQL数据库调用数据时,Python出现问题。
数据库设置为UTF-8,并且包含特殊字母,例如“Æ”和“Ø”。
这是我用来从表中调用用户名的代码
# -*- coding: UTF-8 -*-
import pymysql
db = pymysql.connect(
host="localhost",
user="root",
password="XXXXXXXX",
db="pythonconnectiontest",
charset="utf8"
)
cursor = db.cursor()
cursor.execute("SELECT Username FROM Account")
numrows = cursor.rowcount
for i in range (numrows):
row = cursor.fetchone()
print row
预期输出为:
ThisTextIsBrøken
Tæst
Word
实际输出:
(u'ThisTextIsBr\xf8ken',)
(u'T\xe6st',)
(u'Word',)
我确实在值前面得到了'U',表示这是UNICODE,我可能只需要使python使用encode()或decode()正确地解释文本即可。
我花了很多时间试图解决这个问题,解决方案可能非常简单。
我希望有人能帮助我解决这个问题。
感谢阅读。
答案 0 :(得分:2)
它输出的unicode字符串非常好。您可以通过在python shell中尝试print u'ThisTextIsBr\xf8ken'
来验证这一点:
➜ python2
Python 2.7.15 (default, Jan 10 2019, 23:20:52)
[GCC 8.2.1 20181127] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'ThisTextIsBr\xf8ken'
ThisTextIsBrøken
您的困惑仅仅是关于python如何表示包装在另一个对象中的unicode字符串。在这种情况下,您的行分别代表一列tuple
,或更具体地说,是一个包含单个unicode字符串的元组。
您可以通过调整代码以输出实际的unicode字符串而不是包含它的元组来验证这一点。
# -*- coding: UTF-8 -*-
import pymysql
db = pymysql.connect(
host="localhost",
user="root",
password="XXXXXXXX",
db="pythonconnectiontest",
charset="utf8"
)
cursor = db.cursor()
cursor.execute("SELECT Username FROM Account")
numrows = cursor.rowcount
for i in range (numrows):
row = cursor.fetchone()
print row[0]
现在应该输出预期的字符串。