#python #sqlalchemy
#python #sqlalchemy
Вопрос:
Я долго копался в этой проблеме, хотя есть много сообщений об этом, но, похоже, ни одно из них не является полезным.
У меня есть эта часть кода:
>>> metadata = MetaData()
>>> engine = create_engine('mysql mysqlconnector://root:******@10.**.**.**:4406/metrics')
>>> engine.table_names()
[]
>>> metadata
MetaData(bind=None)
>>> metadata.reflect(bind=engine)
>>> metadata
MetaData(bind=None)
>>> engine
Engine(mysql mysqlconnector://root:***@10.**.**.**:4406/metrics)
>>> metadata.sorted_tables
[]
>>> engine.execute('show tables').fetchall()
[(bytearray(b'TableName1'),), (bytearray(b'TableName2'),), (bytearray(b'TableName3'),), (bytearray(b'TableName4'),), (bytearray(b'TableName5'),), (bytearray(b'TableName6'),), (bytearray(b'TableName7'),), (bytearray(b'TableName8'),), (bytearray(b'TableName9'),), (bytearray(b'TableName10'),), (bytearray(b'TableName11'),), (bytearray(b'TableName12'),), (bytearray(b'TableName13'),), (bytearray(b'TableName14'),), (bytearray(b'TableName15'),), (bytearray(b'TableName16'),), (bytearray(b'TableName17'),), (bytearray(b'TableName18'),), (bytearray(b'TableName19'),)]
как это исправить?
Это ссылка на sqlconnector?
Комментарии:
1. Я не могу воспроизвести. Добавьте
echo=True
к вашемуcreate_engine
вызову, и при выполненииengine.table_names()
выдает ли этоSHOW FULL TABLES FROM metrics
запрос?2. @SuperShoot, вот результат: 2019-03-29 12:40:33,975 INFO sqlalchemy.engine.base. Движок ПОКАЗЫВАЕТ ПОЛНЫЕ ТАБЛИЦЫ ОТ
metrics
2019-03-29 12:40:33,975 INFO sqlalchemy.engine.base. Engine {} []3. Если вы самостоятельно выполните команду show full tables через движок:
engine.execute('SHOW FULL TABLES FROM metrics').fetchall()
она тоже пустая?4. @SuperShoot, в моем сообщении с вопросом я уже опубликовал вывод «показать таблицы». Она не пуста.
5. Смысл был в том, чтобы отразить точно такой же
SHOW FULL TABLES FROM metrics
запрос, который выполняет sqla, но ничего не возвращает, поскольку это запрос, который SQLAlchemy использует для получения имен таблиц, а неSHOW TABLES
то, что вы включили в свой вопрос. Всего наилучшего в поиске ответа.
Ответ №1:
У меня был тот же вывод «[ ]» при использовании engine.table_names()
. Чтобы исправить это, вы должны предоставить «схему» в качестве параметра MetaData(). Ниже приведена простая функция, которую я создал для получения списка таблиц моей базы данных:
def get_tables(engine, schema):
metadata = MetaData(schema = schema)
metadata.reflect(bind=engine)
tables = []
for table in metadata.tables:
table_name = table.replace(f'{schema}.', '')
tables.append(table_name)
return tables