2016-05-12 5 views
0

MySQLデータベースからテーブルを自動マッピングしようとしているときにエラーが発生しました。 エラーは次のとおりです。SQLAlchemyのエンコンディングエラーを伴うPython

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 7: ordinal not in range(128) 

私が作っていたときにこのエラーが発生します。

Base.prepare(engine, reflect=True) 

私のデータベースはutf8_binです。ここで

は、データベースへの私のエンジンの接続です:

engine = create_engine("mysql://User:[email protected]:3308/db?charset=utf8", encoding="utf-8", echo=True) 

そして、ここでは、エラーの完全なスタックトレースです:あなたが私に

を与えることができます任意の助けを事前に

2016-05-12 15:57:39,497 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 
2016-05-12 15:57:39,497 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,511 INFO sqlalchemy.engine.base.Engine SELECT DATABASE() 
2016-05-12 15:57:39,511 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,537 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin' 
2016-05-12 15:57:39,538 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,552 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1 
2016-05-12 15:57:39,552 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,566 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1 
2016-05-12 15:57:39,566 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,580 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin AS anon_1 
2016-05-12 15:57:39,580 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,620 INFO sqlalchemy.engine.base.Engine SHOW FULL TABLES FROM `GesCo` 
2016-05-12 15:57:39,620 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,652 INFO sqlalchemy.engine.base.Engine SHOW CREATE TABLE `Client` 
2016-05-12 15:57:39,652 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,670 INFO sqlalchemy.engine.base.Engine SHOW CREATE  TABLE `ClientContact` 
2016-05-12 15:57:39,670 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,686 INFO sqlalchemy.engine.base.Engine SHOW CREATE TABLE `Dossier` 
2016-05-12 15:57:39,686 INFO sqlalchemy.engine.base.Engine() 
2016-05-12 15:57:39,705 INFO sqlalchemy.engine.base.Engine SHOW CREATE TABLE `RDV` 
2016-05-12 15:57:39,705 INFO sqlalchemy.engine.base.Engine() 
Traceback (most recent call last): 
    File "./api.py", line 29, in <module> 
      Base.prepare(engine, reflect=True) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/automap.py", line 788, in prepare 
    map_config.map() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/base.py", line 592, in map 
    return super(_DeferredMapperConfig, self).map() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/base.py", line 529, in map 
    **self.mapper_args 
    File "<string>", line 2, in mapper 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 627, in __init__ 
    self._configure_properties() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 1318, in _configure_properties 
    setparent=True) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 1607, in _configure_property 
    prop.instrument_class(self) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/properties.py", line 182, in instrument_class 
    doc=self.doc 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 1489, in register_descriptor 
    manager.instrument_attribute(key, descriptor) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/instrumentation.py", line 215, in instrument_attribute 
    self.install_descriptor(key, inst) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/instrumentation.py", line 269, in install_descriptor 
    setattr(self.class_, key, inst) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 7: ordinal not in range(128)` 

感謝

編集:

すべての文字セット変数と照合変数を変更しましたMySQLでABLES、それは静止画は同じエラーを生成します。

mysql> show variables like 'collation%'; 
+----------------------+-----------------+ 
| Variable_name  | Value   | 
+----------------------+-----------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_general_ci | 
| collation_server  | utf8_general_ci | 
+----------------------+-----------------+ 

mysql> show variables like 'character\_set\_%'; 
+--------------------------+--------+ 
| Variable_name   | Value | 
+--------------------------+--------+ 
| character_set_client  | utf8 | 
| character_set_connection | utf8 | 
| character_set_database | utf8 | 
| character_set_filesystem | binary | 
| character_set_results | utf8 | 
| character_set_server  | utf8 | 
| character_set_system  | utf8 | 
+--------------------------+--------+ 

答えて

0

カラム名がéで、SQLAlchemyがモデルクラスの属性名として使用しようとしていますが、Python 2ではASCII属性名しか使用できません。

あなたが変更した名前でexplicitly define this particular classする必要があります

Base = automap_base() 

class RDV(Base): 
    __tablename__ = "RDV" 

    ... 
    accepted = Column("accepté", Boolean, ...) 
1

あなたはutf-8character_set_clientのようにMySQLの変数を設定してみてくださいましたか?あなたは、MySQLで次のクエリを実行し、utf-8にすべての値を設定することをお勧めします:

mysql> show variables like 'character\_set\_%';

ます。また、出力の変数にutf8_general_ciなどのUTF-8照合順序のいくつかを設定してみてくださいすることができます

mysql> show variables like 'collation%';

+0

編集質問、まだ変更なし – Nowahe

関連する問題