3

PythonコードでStormというアクティブレコードを使用し て、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 に答える