我在检查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
这是设置中的连接.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
},
}
我发现Mssql版本和pyodbc版本之间存在版本不匹配:不支持Mssql版本。我解决了使用django pyodbc azure而不是pyodbc直接!
djago 3.2中似乎有一些排序规则更改导致了这个问题,不幸的是,django mssql后端并不正式支持django 3.2(截至2021年11月(。
请参阅:https://code.djangoproject.com/ticket/32767
虽然在大多数情况下,我可以使用django 3.2运行django mssql后端,但我暂时恢复到django 3.1以执行inspectdb
相关讨论:https://stackoverflow.com/a/67305117/341329
django 3.2的第三方后端django-mssql后端仍然存在此问题。然而,现在有一个名为mssql-django的django-mssql后端分支,由微软维护。这个新的fork确实说它支持Django 3.2并且对我有效
https://github.com/microsoft/mssql-django
我遇到了同样的问题,但找到了解决方案:该用户不是db_owner角色的一部分。换句话说,您可能没有足够的权限。使用户成为mssql中数据库的所有者。