MySQLDialect.get_table_names() returns empty list

Issue #3920 closed
Vadim Yanko created an issue

I used mysql-connector==2.1.4 and SQLAlchemy==1.1.5, but accroding to the documentation connector returns bytearray types:

In Connector/Python 1.x, the output is:

Using Python 2: [('1',)]

Using Python 3: [(b'1',)]

In Connector/Python 2.0, for both Python versions, the output is: [(bytearray(b'1'),)]

So, I realize that the only way to make fast solution for my project -- creating monkey-patch of MySQLDialect method mentioned above.

Solution:

Added .decode('utf-8') to row[0] and row[1] variables.

But, I think that you may know other, more elegant way to solve this problem. If not -- write to me, please. I'd like to write PR with fix by myself.

Comments (3)

  1. Mike Bayer repo owner

    as always, using a more common DBAPI like mysqlclient or pymysql would be the most immediate resolution.

    As for this issue, not able to reproduce:

    from sqlalchemy import *
    
    e = create_engine("mysql+mysqlconnector://scott:tiger@localhost/test", echo=True)
    
    print e.dialect.dbapi.__version__
    
    m = MetaData()
    t1 = Table('t1', m, Column('x', Integer))
    t2 = Table('t2', m, Column('x', Integer))
    t3 = Table('t3', m, Column('x', Integer))
    
    m.create_all(e)
    
    print inspect(e).get_table_names()
    
    #!
    
    2.1.5
    2017-02-27 09:10:00,925 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
    2017-02-27 09:10:00,926 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,927 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
    2017-02-27 09:10:00,927 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,929 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
    2017-02-27 09:10:00,930 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,931 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
    2017-02-27 09:10:00,931 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,933 INFO sqlalchemy.engine.base.Engine DESCRIBE `t2`
    2017-02-27 09:10:00,933 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,936 INFO sqlalchemy.engine.base.Engine DESCRIBE `t3`
    2017-02-27 09:10:00,936 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,938 INFO sqlalchemy.engine.base.Engine DESCRIBE `t1`
    2017-02-27 09:10:00,938 INFO sqlalchemy.engine.base.Engine {}
    2017-02-27 09:10:00,941 INFO sqlalchemy.engine.base.Engine SHOW FULL TABLES FROM `test`
    2017-02-27 09:10:00,942 INFO sqlalchemy.engine.base.Engine {}
    [u't1', u't2', u't3']
    

    please try upgrading mysql-connector-python.

  2. Log in to comment