gpt4 book ai didi

python - 如何使用 Python 从 mysql 数据库中获取和打印 utf-8 数据?

转载 作者:行者123 更新时间:2023-11-29 01:56:36 26 4
gpt4 key购买 nike

我在使用 Python 从 MySQL 数据库读取 utf-8 数据时遇到问题。我的数据库包含一个名为 Videos 的表,并且该表至少包含一行具有 Unicode 字符,即

[KR] Samsung Galaxy Beam 2 간단 리뷰 [4K]

表的排序规则是utf8_general_ci ,就像表中字段的排序规则一样。

这是我为了从我的表中获取所有数据而编写的代码:

# Open database connection
db = MySQLdb.connect("localhost","matan","pass","youtube", charset = 'utf8',use_unicode=True)

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "SELECT * FROM VIDEOS"
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
title = row[0]
link = row[1]
# Now print fetched result
print ("title=%s\nlink=%s\n\n" % \
(title, link))
except:
print "Error: unable to fecth data"

# disconnect from server
db.close()

当我运行上面的代码时,它会打印所有只包含“ascii”字符的行,但是当它到达包含 Unicode 字符的行(即我上面提到的行)时,它会打印:

File "C:\Users\Matan\Dropbox\Code\Python\youtube.py", line 28, in printall
(title, link))
File "C:\Python27\lib\encodings\cp862.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 33-34: c
haracter maps to <undefined>

并且不会继续到下一行。

我使用的是 PhpMyAdmin 4.1.14 版、MySQL 5.6.17 版和 Python 2.7.8 版。

编辑:我删除了 except 子句,并更新了我遇到的错误。

最佳答案

您的问题出在您的终端 (sys.stdout) 编码 (cf http://en.wikipedia.org/wiki/Code_page_862 ),这取决于您的系统设置。最好的解决方案(如此处解释:https://stackoverflow.com/a/15740694/41316)是在将它们打印到 sys.stdout 之前明确编码您的 unicode 数据。

如果您不能使用更有用的编码(想到 utf-8,因为它被设计为处理所有 unicode 字符),您至少可以使用替代错误处理,如“替换”(替换非带有 '?' 的可编码字符)或“忽略”(抑制不可编码字符)。

这是您的代码的更正版本,您可以尝试使用 encodingon_error 设置来找出适合您的解决方案:

import sys
import MySQLdb

# set desired output encoding here
# it looks like your default encoding is "cp862"
# but you may want to first try 'utf-8' first
# encoding = "cp862"
encoding = "utf-8"

# what do when we can't encode to the desired output encoding
# options are:
# - 'strict' : raises a UnicodeEncodeError (default)
# - 'replace': replaces missing characters with '?'
# - 'ignore' : suppress missing characters
on_error = "replace"

db = MySQLdb.connect(
"localhost","matan","pass","youtube",
charset='utf8',
use_unicode=True
)
cursor = db.cursor()
sql = "SELECT * FROM VIDEOS"
try:
cursor.execute(sql)
for i, row in enumerate(cursor):
try:
# encode unicode data to the desired output encoding
title = row[0].encode(encoding, on_error)
link = row[1].encode(encoding, on_error)
except UnicodeEncodeError as e:
# only if on_error='strict'
print >> sys.stderr, "failed to encode row #%s - %s" % (i, e)
else:
print "title=%s\nlink=%s\n\n" % (title, link))
finally:
cursor.close()
db.close()

注意:您可能还想阅读这篇文章(特别是评论)http://drj11.wordpress.com/2007/05/14/python-how-is-sysstdoutencoding-chosen/有关 Python、字符串、unicode、编码、sys.stdout 和终端问题的更多信息。

关于python - 如何使用 Python 从 mysql 数据库中获取和打印 utf-8 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com