2017-02-22 7 views
2

私の組織では、Wagtailをベースにした新しいパブリッシングプラットフォームをCMSバックエンドとして開発しています。私たちはMS SQLデータベースの広範な社内専門知識を持っていますが、PostgresやMySQLの隣には誰もいないので、MS SQL(特にSQL Azure)を利用することをお勧めします--Wagtailのドキュメントが示唆しているようです。Wagtail/SQL Azureの互換性に関するトラブルシューティングのアドバイスが必要

私はWagtailのインスタンスを実行しており、SQL Azureをサポートすると主張するDjangoバックエンド(https://pypi.python.org/pypi/django-pyodbc-azure)をインストールしました。 settings.pyでデータベース接続設定を構成しました。

私は正常に移行を実行してスーパーユーザーを作成することができます。そのため、データベースの接続性が良好であると確信しています。

私はその後、createsuperuserスクリプトに提供された資格情報を使用してログインすると直ちにhttp://localhost:8000/adminでセキレイのログインページにアクセスできますが、私は次のエラーを取得:それはセキレイ自身を思わ

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

を使用していますMS SQLでサポートされていないこのLIMITキーワード - この問題を解決するためのベストプラクティスは何ですか?それとも、私は何にも隠れていますか?

問題のある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をSELECT * wagtailcore_pagerevision FROM WP%max_created_at DESC限界によってpage_idのORDER BY max_created_at、USER_ID =%sのGROUP wagtailcore_pagerevision FROM page_idのAS( SELECT MAX(のcreated_at)に参加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'というキーワードがありません。' TOP' – TheGameiswar

+0

Wagtailは現在SQL Serverを正式にサポートしていません。過去のユーザーはWagtailにSQL Serverを使用してもらうことに成功し、MS SQLとの互換性を提供するためのパッチを提供しましたが、互換性を維持するための継続的なQAテストは現在ありません。残念ながら、Wagtail 1.7の間にこのクエリがスリップしたように見え、今まで報告されていません。 – gasman

答えて

0

おかげで、すべて。

私たちは、SQLの厄介なビットをハッキングして、エンドで働く事を得ることができたし、それがすべての問題を(そのためには良いニュースだ!)を引き起こすだけのものだったことを発見し

私もいずれかを見ることなく1.9にアップグレード他の問題もあるので、それは肯定的です。私たちは、おそらくこれをさらに進めて、単に別のDB接続を許可する場合... elseブロックでこれを包むのトムD'sの提案のアプローチを考慮することがあります

 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

ほとんどの部分については、セキレイは、MS SQLをサポートしてDjangoのORMを使用しています。通常、パフォーマンス上の理由から、「生の」SQLにドロップするケースがあります。この場合、生のSQLはMS SQLと互換性がありません。

  1. リファクタリングDjangoのORMを使用するコード(任意のパフォーマンスへの影響を確認する)

  2. 例えば、MS SQLのための特別なケースを提供します:あなたはこれを解決するために取ることができる二つのアプローチがあります。応答のための

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

関連する問題