3

我在 Python 代码中使用名为Storm的 Active Record 来检索 MySQL 数据库中的一些记录。

问题是:我的表在'utf8_unicode_ci'中,但是当我检索对象时我得到'latin-1'属性,所以我需要做object.attr.decode('latin-1').encode('utf- 8') 这并不总是有效 - 抛出一些异常。

我的问题:这是python行为吗?MySQL的行为?与风暴有关的东西?

编码:

Storm.conn(user=db_user,db=db_name, passwd=db_passwd)
events = Event.select('*',status='=2',date_end='>=NOW()')
for event in events:
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    try:
        #here we need only utf-8 strings
        conn.index({"title": event.get_title(), "local": event.get_local(), "url": event.getUrl(), "description": event.get_description(), "artists": event.get_artists(), "tags": event.get_tags(), "picture": event.get_Picture(), "type": event.get_type(), 'date_begin': event.get_date_begin(), 'date_end': event.get_date_end(), '_ttl': event.get_ttl()}, "wf", "event", event.id)
        print 'Indexed - '+now+': '+str(event.id)
    except Exception,error:
        print 'Error - '+now+': '+str(event.id)+" - "+str(error)
4

2 回答 2

2

不知道堆栈的细节,但是对于 MySQL,您需要将连接的编码与表的编码分开设置。我有一些 unicode 表,我花了很长时间才意识到连接设置为 latin-1,所以我的 unicode 数据被解释为 Latin-1 字节并在远端“转换”为无意义的 unicode。

于 2012-09-01T21:22:43.107 回答
1

也许这个答案看起来很愚蠢,但是尝试在解释器路径之后将其打印在 py 文件的顶部

#!/usr/bin/env python
# -*- coding: utf-8 -*-
于 2012-08-31T18:31:35.053 回答