>>> 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'。而且我的数据库中的情况越来越糟。
我们怎么打印普通字符串?
答案 0 :(得分: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',)
我找到了答案 here,Character Encoding
段。
答案 1 :(得分:1)
我觉得你不习惯使用Unicode。首先(1):
“没有像纯文本那样的东西。
如果你有一个字符串,在内存中,在 您有文件或电子邮件 知道它或你的编码 无法解释或显示它 用户正确。“
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)
我绝对,积极地推荐,甚至可能会坚持要你阅读“The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)”。 Unicode可能很难开始,但是当你掌握这些概念时,它将成为你最好的新朋友 - 你会看到u
越多,你就会越快乐。相信我。
答案 2 :(得分:0)
'u'代表unicode。您可以像字符串一样使用它们。如果你真的想要字符串,那就做str(u'BUY')
。
更新:我误解了这个问题。以下代码适用于MySQL DB而不是mysqli。对困惑感到抱歉。不删除内容。
另外,只是一个建议。而不是仅使用返回元组作为结果集的游标。使用'dict'作为光标。它将为您提供一个易于访问的字典,字段名称为键和&其对应的值为行。这更像是pythonic。这可以这样做 -
cursor = conn.cursor(MySQLdb.cursors.DictCursor)
而不是
cursor = conn.cursor()
conn是你的连接对象来自MySQLdb.connect()
方法
答案 3 :(得分:0)
将行元组中的unicode字符串转换为常规字符串:
for row in c:
print tuple(str(x) for x in row)