2017-09-27 3 views
0

Howdie faire,SQLAlchemy réflexion défaut en Python 3.6 avec PyMySQL

Je tente d'utiliser Python 3.6 avec SQLAlchemy. Je suis en mesure de se connecter à la base de données, mais toutes les tentatives de réflexion ne parviennent pas:

Traceback (most recent call last): 
    File "/Users/jw1050/Python/projects/label_automation/generate.py", line 14, in <module> 
    metadata.reflect(engine, only=['parcel', 'order', 'address', 'document']) 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/sql/schema.py", line 3874, in reflect 
    bind.engine.table_names(schema, connection=conn)) 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names 
    return self.dialect.get_table_names(conn, schema) 
    File "<string>", line 2, in get_table_names 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/engine/reflection.py", line 42, in cache 
    return fn(self, con, *args, **kw) 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/base.py", line 1756, in get_table_names 
    self.identifier_preparer.quote_identifier(current_schema)) 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/sql/compiler.py", line 2888, in quote_identifier 
    self._escape_identifier(value) + \ 
    File "/Users/jw1050/.virtualenvs/psd_label_automatiion/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 78, in _escape_identifier 
    value = value.replace(self.escape_quote, self.escape_to_quote) 
TypeError: a bytes-like object is required, not 'str' 

Mes informations de connexion ci-dessous:

engine = create_engine('mysql+pymysql://:127.0.0.1:3306/(db_name)?charset=utf8&use_unicode=0') 
session = scoped_session(sessionmaker(bind=engine))() 

metadata = MetaData() 
metadata.reflect(engine, only=['parcel', 'order', 'address', 'document']) 
Base = automap_base(metadata=metadata) 
Base.prepare() 

Tout fonctionne très bien en Python 2, mais je ne veux pas utiliser Python 2 ici. Quelqu'un d'autre a-t-il rencontré ce problème et est-il capable de le résoudre?

Répondre

0

Je l'ai compris.

Cela était dû à ma chaîne de connexion ayant use_unicode = 0 dedans.

Selon le SQLAlchemy Docs, ce paramètre ne doit jamais être utilisé dans Python3. En Python 2, il donne des performances supérieures mais pas en Python 3

Espérons que cela aide quelqu'un