SQLAlchemy エンジンで次のように実行する SQL クエリがあります。
result = engine.execute('SELECT utf_8_field FROM table')
データベースは MySQL で、列の型は UTF-8 エンコーディングの TEXT です。エンジンの作成時にオプション convert_unicode=True を設定しても、返される utf_8_field のタイプは「str」です。文字列に 'é' のような文字 (7 ビット ASCII ではなく、拡張 ASCII セット) がある場合、これを実行しようとすると UnicodeDecodeError が発生します。
utf_8_field.encode("utf-8")
正確なエラーは次のとおりです。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)
これを調べたところ、str.encode が拡張 ASCII 文字セットをサポートしていないことがわかりました。これは本当に奇妙だと思いますが、それは別の質問です。
私が理解していないのは、SQLAlchemy がユニコード文字列を与えない理由です。以前は DB-API を使用していましたが、問題なく動作していました。テーブル用の SQLAlchemy テーブル オブジェクトもまだ持っていません。そのため、実行コマンドを使用しています。
何か案が?