Я пытаюсь отразить системную таблицу в базе данных MS SQL Server:
from sqlalchemy import engine, create_engine, MetaData, Table
meta = MetaData()
url = engine.url.URL(
"mssql+pyodbc",
username=credentials["username"],
password=credentials["pswd"],
host=credentials["host"],
database=credentials["db"],
query=dict(driver="ODBC Driver 13 for SQL Server")
)
e = create_engine(url)
conn = e.connect()
tt = Table("objects", meta, autoload=True, autoload_with=e, schema="sys")
for c in tt.columns:
print(c.name)
В конце я получаю ошибку NoSuchTable.Я пытался отразить другие системные таблицы (sys.triggers, sys.sql_modules) - те же результаты.С обычными таблицами этот код работает нормально, я могу перечислять столбцы и делать другие запросы.Вход в систему, который я использую в своем приложении, имеет роль «db_owner», поэтому у него достаточно разрешений, и если я напишу что-то вроде этого
for item in conn.execute("select * from sys.triggers"):
print(item)
, он будет работать нормально.
Что я делаю не так?Есть ли какой-либо другой способ работы с данными из системных таблиц, кроме выполнения необработанных SQL-запросов и преобразования результатов в классы данных и т. Д .?