Python - 关于从mysql中检索的结果
>>> c = conn.cursor()
>>> c.execute('select * from stocks order by price')
>>> for row in c:
... print row
...
(u'2006-01-05', u'BUY', u'RHAT', 100, 35.14)
(u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)
从我们看到的情况来看,每一列前面都有一个'u'。而且在我的数据库里,这个情况还在变得更糟。
我们该怎么才能打印出正常的字符串呢?
4 个回答
0
把这个行元组里的unicode字符串转换成普通字符串:
for row in c:
print tuple(str(x) for x in row)
2
嗯,这个问题有点老了,不过我在用Python3的时候也遇到过同样的问题。我在我的连接代码里加上了 use_unicode=False
:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="databasename",
use_unicode=False
)
cursor = mydb.cursor()
cursor.execute("SELECT name FROM Server")
for name in cursor:
print(name)
结果:
('Server1',)
我在 这里找到了答案,具体在 字符编码
这一段。
1
我感觉你对使用Unicode还不太熟悉。首先,来看看这段话:
没有所谓的纯文本。
如果你有一个字符串,不管是在内存中、文件里,还是在邮件中,你必须知道它是什么编码的,否则你就无法正确理解或显示给用户。
在文本前加个u,表示你正在处理一个unicode
对象,而不是普通的string
对象。所以,如果你把一个unicode对象转换成字符串,前面总会有个u。
如果想去掉这个u,你需要用某种特定的编码来编码这个unicode
对象。比如,如果你使用的控制台是utf-8编码的,你就想把你的数据转换成一个utf-8
编码的字符串。
你可以用encode
来编码unicode对象。例如:
print row[0].encode('utf-8')
这应该会得到
2006-01-05
……前提是你的控制台/终端使用的是相同的编码(utf-8)。
同样,你也可以遍历元组:
for row in c:
print tuple(x.encode('utf-8') for x in row)
我非常强烈地推荐你去读一读这篇文章:"每个软件开发者绝对必须知道的Unicode和字符集的最低限度(没有借口!)"。Unicode一开始可能会有点难,但当你掌握了这些概念,它就会成为你最好的朋友——你看到的u
越多,你就会越开心。相信我。