Python - 关于从mysql中检索的结果

1 投票
4 回答
940 浏览
提问于 2025-04-16 05:24
>>> 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越多,你就会越开心。相信我。

撰写回答