Отражение в SQLAlchemy не работает для системных таблиц MS SQL Server? - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь отразить системную таблицу в базе данных 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-запросов и преобразования результатов в классы данных и т. Д .?

1 Ответ

0 голосов
/ 29 июня 2019

Я пытался отразить системные представления в базе данных MS SQL Server.После добавления echo = 'debug' в движок я понял, что SQL Alchemy ищет в таблице и метаданных представления из INFORMATION_SCHEMA в MSSQL.

Системные таблицы и представления не перечислены в INFORMATION_SCHEMA.TABLES ИЛИ INFORMATION_SCHEMA.VIEWS.

(я использую SQLAlchemy версии 1.3.5.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...