我在Win 10 Enterprise上运行安装了Django / DRF的Python 2.7。我的目标是在这台机器上访问现在在SQL Server 2017上运行的旧MSSQL数据库。
我在使用Python完全使用MSSQL的几次尝试中遇到了一些麻烦,通常是在一些模糊的错误中。我已经让Django与MySQL,Postgres和SQLite一起工作了。但是,这是我多年前在专业使用.NET / MSSQL时设计的数据库,数据库目前正在生产中使用,而且有些客户实际上使用旧版MS Access作为ADO项目(畏缩)访问MSSQL,因此在游戏后期将所有内容移动到不同的RDBMS并不是很可行。它会造成比它值得多的麻烦。
在旁注中,我使用.NET Core进行了一些初步测试,作为可能将其用作访问数据库的Web API服务器的测试,我对在EF Core中完成的一些动作感到不满意竞技场。在我的测试中它非常慢,并且不支持我需要的一些东西。我曾经为.NET Framework编写了自己的ORM,但是需要将它移植到.NET Core。带有Django的inspectdb命令是我所希望的,因为它需要所有手动模型工作,并且我在这个数据库中有很多表和视图。我不知道.NET Core世界中的任何等价物。
我按照https://django-mssql.readthedocs.io/en/latest/quickstart.html#installation中的说明通过pip安装django-mssql并配置我的数据库,但是当我运行inspectdb时出现以下错误:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 338, in execute
django.setup()
File "C:\Python27\lib\site-packages\django\__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Python27\lib\site-packages\django\apps\registry.py", line 108, in populate
app_config.import_models()
File "C:\Python27\lib\site-packages\django\apps\config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Python27\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\Python27\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 124, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 325, in add_to_class
value.contribute_to_class(cls, name)
File "C:\Python27\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "C:\Python27\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Python27\lib\site-packages\django\db\utils.py", line 212, in __getitem__
conn = backend.DatabaseWrapper(db, alias)
File "C:\Python27\lib\site-packages\sqlserver_ado\base.py", line 184, in __init__
super(DatabaseWrapper, self).__init__(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\backends\base\base.py", line 96, in __init__
self.client = self.client_class(self)
TypeError: Error when calling the metaclass bases
'NoneType' object is not callable
DB配置:
DATABASES = {
'default': {
'ENGINE': 'sqlserver_ado',
'NAME': 'ProductionDB',
'HOST': 'localhost,1433',
'USER': '',
'PASSWORD': '',
}
}
还尝试配置HOST和PORT。结果相同。尝试了pyodbc,它说它不支持Django 1.11,这就是我正在使用的。