アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるシステムを実行すると、下記エラーが表示されました。
---------------
Traceback (most recent call last):
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 446, in send_error
data, 'text/html')
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\chrome.py", line 830, in render_template
message = req.session.pop('chrome.%s.%d' % (type_, i))
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 216, in __getattr__
value = self.callbacks[name](self)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\main.py", line 306, in _get_session
return Session(self.env, req)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 223, in __init__
self.promote_session(sid)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 282, in promote_session
@self.env.with_transaction()
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\api.py", line 77, in transaction_wrapper
fn(ldb)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 287, in update_session_id
""", (sid, self.req.authname))
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\util.py", line 65, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 78, in execute
result = PyFormatCursor.execute(self, *args)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 56, in execute
args or [])
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 48, in _rollback_on_error
return function(self, *args, **kwargs)
ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
-----------------

調査してみたら、Pythonで、 text_factory = str を設定したら良いとわかりましたが、設定方法が
わかりません。
対話モードで設定したら良いのでしょうか?
Pythonに関しては全然わからないのでどのように設定したら良いかがわかりません。
教えてください。

よろしくお願いします。

A 回答 (2件)

もう一度、マニュアルをよく読んでください。



> この属性を使って TEXT データ型をどのオブジェクトで返すかを制御できます
とあります。つまり、「この属性」= text_factory です。

> デフォルトではこの属性は unicode に設定されており
> str に設定してください
と続いて
>この属性を sqlite3.OptimizedUnicode に設定してください
なのですから、よほどの駄文でなければ、 「この属性」= text_factory だとわかります。

「これを有効にしたければ」の「これ」とは、その前の「非ASCIIデータに限って Unicode オブジェクトを返し、 その他の場合にはバイト列を返す」ことです。
これは原文の
> To activate it,
の方がわかりやすいかもしれません。


さらに、サンプルコードを見ると
con.text_factory = sqlite3.OptimizedUnicode
というコードがあるのがわかります。
    • good
    • 0
この回答へのお礼

おかげさまで解決できました!
感謝です!
ありがとうございました。

お礼日時:2014/01/03 20:30

実際にsqlit3を使ったわけではありませんが。




http://docs.python.org/2/library/sqlite3.html#sq …
にサンプルコード付きで載っています。

ただ、
「It is highly recommended that you instead just switch your application to Unicode strings.」
と、Unicode文字列を使うことを強く勧められています。
扱っているものがバイナリーデータでなければ、Unicode文字列を使うようにしてはどうでしょうか?

「Unicode文字列 Python」で検索すると、よいでしょう。
http://docs.python.jp/2.7/howto/unicode.html

この回答への補足

アドバイスありがとうございます。

参考として教えて頂いたサイトですが、もう少し教えてください。


頂いた情報をもとにしてさらに調査してみましたら日本語に翻訳されたサイトを見つけました。

http://docs.python.jp/2.5/lib/sqlite3-Connection …

これを有効にしたければ、 この属性を sqlite3.OptimizedUnicode に設定してください。

と書かれていますが、属性を sqlite3.OptimizedUnicode に設定とはどのようにしたらよいでしょうか?
Pythonに関しては初心者なのでもう少しヒントを頂けたら大変助かります。

補足日時:2013/12/29 13:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!