SQL Соединение с сервером 2016 с использованием sqlalchemy и pyodb c не возвращает таблиц - PullRequest
0 голосов
/ 23 марта 2020

Я могу подключиться к серверу SQL, используя следующий код:

import sqlalchemy as sa
import urllib

params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
                                 "SERVER=serv;"
                                 "DATABASE=db1;"
                                 "Trusted_Connection=yes")

engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))

Это сервер компании, и у нас есть несколько баз данных, например, db1, db2, et c. Проблема заключается в том, что, когда я запрашиваю имена таблиц из базы данных, используя это:

inspector = sa.inspect(engine)
print(inspector.get_table_names())

Это не работает во всех случаях, то есть возвращает имена таблиц для db1, но возвращает пустой список для db2, хотя есть таблиц в этой базе данных.

Я не могу понять это поведение, оно не показывает ошибок, что означает успешное соединение, так почему же он не может отображать имена таблиц?

1 Ответ

0 голосов
/ 25 марта 2020

Оказывается, для баз данных, где я не могу получить какую-либо таблицу, для схемы по умолчанию (inspector.default_schema_name) задано мое Windows имя пользователя вместо dbo. Вот почему он не может найти таблицу.

Передача требуемой схемы в качестве аргумента решает проблему.

inspector = sa.inspect(engine)
print(inspector.get_table_names(schema='dbo'))

Хотя это решает проблему, я все еще не знаю причина того, почему для некоторых баз данных схема по умолчанию установлена ​​на dbo, а для других мое Windows имя пользователя.

...