Django Inspectdb 在尝试检查 table 时出现 MSSql 错误

Django Inspectdb on MSSql error while trying to inspect a table

我在尝试检查 MsSql 数据库时遇到此错误:

# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models
# Unable to inspect table 'test_table'
# The error was: __new__() missing 1 required positional argument: 'collation'

这是我用过的命令:

python manage.py inspectdb test_table --database=some_db --verbosity=3

这是settings.py中的连接:

  'some_db':{
        'ENGINE': 'sql_server.pyodbc',
        'NAME': os.environ['name'],
        'USER': os.environ['user'],
        'PASSWORD': os.environ['pw'],
        'HOST': os.environ['db'],
        'PORT': os.environ['port'],
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'unicode_results': True

        },
    }

我遇到了同样的问题,但找到了解决方案: 该用户不属于 db_owner 角色。换句话说,您可能没有足够的权限。在您的 mssql 中将数据库的用户设为所有者。

我发现 Mssql 版本和 pyodbc 版本不匹配:不支持 Mssql 版本。我直接使用 django-pyodbc-azure 而不是 pyodbc 解决了!

似乎 djagno 3.2 中的一些排序规则更改导致了这个问题,不幸的是 django-mssql-backend 不正式支持 django 3.2(截至 2021 年 11 月)。

参见:https://code.djangoproject.com/ticket/32767

虽然在大多数情况下我能够 运行 django-mssql-backend 与 django 3.2,我暂时恢复到 django 3.1 以执行 inspectdb

相关讨论位于:

第三方后端 django-mssql-backend 对于 Django 3.2 仍然存在这个问题。但是,现在有一个名为 mssql-django 的 django-mssql-backend 分支,由 Microsoft 维护。这个新的分支确实说它支持 Django 3.2 并且对我有用。

https://github.com/microsoft/mssql-django