使用 Django pyodbc SQLSERVER 问题

Posted

技术标签:

【中文标题】使用 Django pyodbc SQLSERVER 问题【英文标题】:Use Django pyodbc SQLSERVER issue 【发布时间】:2012-06-01 13:30:07 【问题描述】:

我正在尝试将 django 与 sqlserver 连接。我已经安装了 python odbc 和 django-odbc。

我的数据库配置(settings.py)

DATABASES = 
    'default': 
        'ENGINE': 'sql_server.pyodbc', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'EDAS',                      # Or path to database file if using sqlite3.
        'USER': 'sa',                      # Not used with sqlite3.
        'PASSWORD': '1324',                  # Not used with sqlite3.
        'HOST': 'DBIO01-HP',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '1433'                      # Set to empty string for default. Not used with sqlite3.
    

但是,当我尝试运行服务器时出现此错误:

C:\edas>python manage.py runserver

Validating models...

Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.comma
nds.runserver.Command object at 0x02EC2E70>>
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\management\commands\runserver.py", line 91, in inner_run
    self.validate(display_num_errors=True)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "C:\Python27\lib\site-packages\django\core\management\validation.py", line 23, in get_validation_errors
    from django.db import models, connection
  File "C:\Python27\lib\site-packages\django\db\__init__.py", line 40, in <module>
    backend = load_backend(connection.settings_dict['ENGINE'])
  File "C:\Python27\lib\site-packages\django\db\__init__.py", line 34, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 92, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 24, in load_backend
    return import_module('.base', backend_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\sql_server\pyodbc\base.py", line 56, in <module>
    elif 'collation' in settings.DATABASE_OPTIONS:
  File "C:\Python27\lib\site-packages\django\utils\functional.py", line 185, in inner
    return func(self._wrapped, *args)
AttributeError: 'Settings' object has no attribute 'DATABASE_OPTIONS'

谁能帮我弄清楚如何解决它?

【问题讨论】:

【参考方案1】:

通过切换到 Michael Baltaks 提到的分支,我走得更远了。我使用以下命令卸载旧的不兼容版本:

$ pip uninstall sql-server.pyodbc

然后安装 git-hub 版本:

$ pip install https://github.com/avidal/django-pyodbc/archive/django-1.4.zip

然而,这并没有让我一直工作。我现在收到以下错误:

pyodbc.Error: ('00000', '[00000] [iODBC][Driver Manager]dlopen(FreeTDS, 6): image not found (0) (SQLDriverConnect)')

【讨论】:

【参考方案2】:

看起来有人在这里为 django 1.4 选择了 django-pyodbc https://github.com/avidal/django-pyodbc

【讨论】:

【参考方案3】:

兄弟,

这已经 2 岁了...希望您有答案。 对于它的价值:您声明的数据库对象需要一个“选项”参数,见下文。

#Database connector
DATABASES = 
    'default': 
        'ENGINE': '',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
        'OPTIONS': 
            'driver': '',
            'MARS_Connection': True,
        ,
    

【讨论】:

【参考方案4】:

看起来 django-odbc 是一个死项目,并且不再与最新的 Django 兼容,从 1.3 版开始。

您可以通过编辑 C:\Python27\lib\site-packages\sql_server\pyodbc\base.py",第 56 行查看 settings.DATABASES['default'].get('options') 来修复它,但如果您这样做,您无疑会发现更多进一步的不兼容。

【讨论】:

是否还有其他活动项目可以替代 django-odbc?【参考方案5】:

看看这个分叉:https://github.com/avidal/django-pyodbc

兼容 Django 1.4

【讨论】:

【参考方案6】:

这对我有用,特别是 driver_supports_utf8 行:

'dbconn': 
            'CREATE_DB': False,
            'CREATE_USER': False,
            'CREATE_TBLSPACE': False,
            'ENGINE': 'django_pyodbc',
            'NAME': 'DBNAME',
            'USER': 'user',
            'PASSWORD': 'password',
            'HOST': 'HOST',
            'OPTIONS': 
                'host_is_server': True,
                'driver_supports_utf8': True,
            
        

【讨论】:

【参考方案7】:

删除Lib\site-packages\中的sql server文件夹,然后执行 pip install django-pyodbc-azure pip install sql_server.pyodbc

【讨论】:

以上是关于使用 Django pyodbc SQLSERVER 问题的主要内容,如果未能解决你的问题,请参考以下文章

django-pyodbc bulk_create 坏了

MSSQL django_pyodbc 连接问题

Django 1.11.7+django_pyodbc_azure-1.11.0.0+pyodbc 连接mssql 数据库

Django With MSSQL using Pyodbc:未保存模型表单

django-pyodbc 并调用存储过程

Django pyodbc 支持 Nexus DB 还是依赖于数据库?