带Django的MSSQL

时间:2017-10-29 00:50:53

标签: python sql-server django

我在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,这就是我正在使用的。

0 个答案:

没有答案