Python - 关于从mysql检索的结果

时间:2010-10-13 02:52:04

标签: python mysql string

>>> 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 :(得分: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',) 

我找到了答案 hereCharacter 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)