Как сгенерировать Microsoft SQL Server DDL кроссплатформенным способом (предпочтительно на Python)?

#python #sql-server

#python #sql-сервер

Вопрос:

Я хотел бы иметь кроссплатформенный способ выгрузки DDL базы данных SQL Server в файлы, чтобы я мог сохранять их в системе управления версиями. В настоящее время я использую SQLDMO в VBScript в Windows для этого, но я надеюсь, что смогу сделать это и из системы Linux, предпочтительно на Python.

В настоящее время у меня есть что-то вроде решения с использованием отражения таблицы SQLAlchemy, но это немного медленно и в настоящее время не дает мне всех деталей, которые я хочу. Например, отсутствует внешний ключ «При КАСКАДНОМ УДАЛЕНИИ».

Существуют ли какие-либо другие проекты, восстанавливающие DDL только из того, что вы можете получить через T-SQL? Если это так, я, вероятно, смогу перенести это на Python без особых проблем. Другие предложения также приветствуются.

Комментарии:

1. Вы могли бы использовать RDP-клиент для удаленного рабочего стола из * nix на WinServer и запускать существующие скрипты…

2. Если доступно , я нахожу Microsoft VS Database Project (требуется VS, не уверен, какая версия) подходящим инструментом для этой задачи. Я думаю, что на самом деле есть способ попросить SQL Server вернуть определения в виде буквального текста, но я мог бы просто выдумать это.

Ответ №1:

Вот мой пример некоторого кода, который делает это:

https://bitbucket.org/rsyring/mssqlddlwriter/

Он записывает основные сведения для таблиц, ограничений, индексов и запускает файлы.

Комментарии:

1. упс. Не знал, что вы были оригинальным постером — и мне было интересно, как проект bitbucket мог появиться так недавно ! 🙂

Ответ №2:

Это не полное решение (это скрипт, изначально написанный Тимом Чепменом, который я в какой-то момент нашел в Интернете и который несколько раз исправлялся), но я использую хранимую на T-SQL процедуру, которая может создавать таблицы сценариев:

https://github.com/TaoK/PoorMansTSqlFormatter/blob/master/PoorMansTSqlFormatterTest/Data/InputSql/5_ComplexDDL.txt

Это не очень полезно, если вы хотите создавать сценарии и для других объектов (процессы, представления и т.д.), Но если вы ищете только структуру таблицы, у меня это сработало довольно хорошо! Как и предложение @ Randy выше, он обрабатывает таблицы, индексы и ограничения, хотя этот не обрабатывает триггеры.

Комментарии:

1. Спасибо за ссылку. Я использую отражение SQLAlchemy для генерации табличной части, но обеспокоен тем, что мне не хватает некоторых деталей. В конечном итоге я могу реализовать это самостоятельно, и в этот момент ссылка будет полезной.