2017-02-22 35 views
2

Моя организация разрабатывает новую платформу публикации на основе Wagtail как бэкэнда CMS. У нас есть обширный собственный опыт работы с базами данных MS SQL, но рядом с ними нет Postgres или MySQL, поэтому предпочли бы использовать MS SQL (в частности, SQL Azure), которые, по-видимому, предлагают документы Wagtail.Рекомендации по устранению неполадок Требуется совместимость с Wagtail/SQL Azure

У меня есть экземпляр Wagtail и установлены бэкэнд Django (https://pypi.python.org/pypi/django-pyodbc-azure), который утверждает, что поддерживает SQL Azure. Я настроил настройки подключения к базе данных в settings.py.

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

я тогда можно перейти к странице трясогузка входа в http://localhost:8000/admin, но сразу же после входа в систему с учетными данными, предоставленные сценарии createsuperuser, я получаю следующее сообщение об ошибке:

('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'LIMIT'. (102) (SQLExecDirectW)")

Казалось бы, что сама трясогузка использует это ключевое слово LIMIT, которое не поддерживается в MS SQL. Каков мой лучший подход к устранению неполадок и попытка разрешить это поведение? Или я прячусь ни к чему?

обижая SQL:

SELECT wp.* FROM wagtailcore_pagerevision wp 
JOIN (SELECT max(created_at) AS max_created_at, 
page_id FROM wagtailcore_pagerevision WHERE user_id = %s 
GROUP BY page_id ORDER BY max_created_at DESC LIMIT %s) AS max_rev ON max_rev.max_created_at = wp.created_at ORDER BY wp.created_at DESC 
+0

Нарушитель бит SQL, как представляется:. 'ВЫБРАТЬ WP * ОТ wagtailcore_pagerevision в.ч. Join ( SELECT MAX (created_at) КАК max_created_at, PAGE_ID ОТ wagtailcore_pagerevision ГДЕ идентификатор_пользователя =% s GROUP BY PAGE_ID ORDER BY max_created_at DESC LIMIT% s ) AS max_rev ON max_rev.max_created_at = wp.created_at ORDER BY wp.created_at DESC' из wagtail/wagtailadmin/views/home.py – nm76

+0

SQLServer не имеет 'LIMIT' keyword.use' TOP' вместо – TheGameiswar

+0

Обратите внимание, что Wagtail официально не поддерживает SQL Server в настоящее время. В прошлом пользователи успешно получили Wagtail, работающий с SQL Server, и предоставили исправления для обеспечения совместимости с MS SQL, но в настоящее время нет постоянного тестирования QA, чтобы обеспечить его совместимость. К сожалению, похоже, что этот запрос проскользнул во время Wagtail 1.7 и до сих пор не сообщается. – gasman

ответ

0

Спасибо за ответы, все.

Нам удалось получить все заработало в конце концов, взламывая неудобный немного SQL и обнаружил, что это было единственное, что вызывает каких-либо проблем (так что это хорошая новость!)

Я также повышен до 1,9, не видя ни другие проблемы, поэтому он выглядит положительным.

Наша модификация

 last_edits = PageRevision.objects.raw(
     """ 
     SELECT wp.* FROM 
      wagtailcore_pagerevision wp JOIN (
       SELECT TOP 5 max(created_at) AS max_created_at, page_id FROM 
        wagtailcore_pagerevision WHERE user_id = %s GROUP BY page_id ORDER BY max_created_at DESC 
      ) AS max_rev ON max_rev.max_created_at = wp.created_at ORDER BY wp.created_at DESC 
     """, [self.request.user.pk]) 

Мы, вероятно, будет прогрессировать это дальше, и с учетом предложенного Тома двойки подход просто оборачивать это в ... если еще блок, чтобы учесть различные подключения к БД.

1

По большей части, трясогузка использует ORM Django, которая поддерживает MS SQL. В некоторых случаях мы переходим к «сырым» SQL, как правило, по соображениям производительности. В этом случае необработанный SQL не совместим с MS SQL, как вы указываете. Есть два подхода, которые Вы могли бы предпринять для решения этой проблемы:

  1. реорганизовать код, чтобы использовать Django ORM (проверка каких-либо последствий производительности)

  2. Обеспечить особый случай для MS SQL, например,

https://github.com/wagtail/wagtail/blob/da067679cdd7999c256c8916f78c82f7641d51cd/wagtail/wagtailcore/models.py#L602