【发布时间】:2017-02-22 16:21:35
【问题描述】:
我的组织正在开发一个基于 Wagtail 作为 CMS 后端的新发布平台。我们在 MS SQL 数据库方面拥有丰富的内部专业知识,但在 Postgres 或 MySQL 方面几乎没有,因此更愿意使用 MS SQL(特别是 SQL Azure)——Wagtail 的文档似乎表明这是可能的。
我有一个 Wagtail 实例正在运行,并安装了一个声称支持 SQL Azure 的 Django 后端 (https://pypi.python.org/pypi/django-pyodbc-azure)。我已经在 settings.py 中配置了我的数据库连接设置。
我可以成功运行迁移并创建超级用户,因此我有理由相信数据库连接良好。
然后我可以在http://localhost:8000/admin 浏览到 Wagtail 登录页面,但在使用提供给 createsuperuser 脚本的凭据登录后,我立即收到以下错误:
('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL 服务器]'LIMIT' 附近的语法不正确。 (102) (SQLExecDirectW)")
Wagtail 本身似乎正在使用这个在 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
【问题讨论】:
-
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` from wagtail/wagtailadmin/views/home.py
-
SQLServer 没有
LIMIT关键字。改用TOP -
请注意,Wagtail 目前还没有正式支持 SQL Server。过去,用户已经成功让 Wagtail 与 SQL Server 一起工作,并提供补丁以提供 MS SQL 兼容性,但目前没有持续的 QA 测试来确保它保持兼容。不幸的是,这个查询似乎是在 Wagtail 1.7 期间出现的,并且到目前为止尚未报告。
-
我从 1.7 开始就没有测试过,对不起!我做了一个笔记来看看迁移并包含一个 SQL Server 友好的版本。
-
我已经为此启动了一个补丁。它不漂亮,但它会在 Wagtail 需要 Django 1.11 之前工作,我们可以在 ORM 中进行子选择!
标签: python sql-server django azure-sql-database wagtail