首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用django-pyodbc (ubuntu16.04)配置数据库设置Django-MSSQL?

如何使用django-pyodbc (ubuntu16.04)配置数据库设置Django-MSSQL?
EN

Stack Overflow用户
提问于 2016-12-17 19:50:13
回答 2查看 3.2K关注 0票数 2

我是Django的新手,目前正在尝试使用另一个数据库来保存我的模型(即MS SQL)。我的数据库部署在一个码头容器中:

代码语言:javascript
复制
903876e64b67        microsoft/mssql-server-linux   "/bin/sh -c /opt/mssq"   5 hours ago         Up 5 hours          0.0.0.0:8888->1433/tcp             nauseous_williams

我还为登录到Server创建了一个新用户。

Username='kucing', password='xxxxx'

对于我的用户,我可以使用sqlcmd访问我的DB,如下所示:

sqlcmd -S localhost,8888 -U kucing -P 'xxxxx'

因此,我更改DB的Django设置,如下所示:

代码语言:javascript
复制
DATABASES = {
    'default': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': 'videogame', #The DB name
    'USER': 'kucing',
    'PASSWORD': 'xxxxx',
    'HOST': 'localhost',
    'PORT': '8888',

    'OPTIONS': {
        'driver': 'ODBC Driver 13 for SQL Server',
    },
},

但是,当我运行python manage.py migrate时,会得到一个与身份验证相关的错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
  self.connect()
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/django/db/backends/base/base.py", line 171, in connect
  self.connection = self.get_new_connection(conn_params)
File "/home/luca/git/learnPython/DjangoTicTacToe/lib/python3.5/site-packages/sql_server/pyodbc/base.py", line 302, in get_new_connection
  timeout=timeout)
  pyodbc.Error: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed for user 'kucing'. (18456) (SQLDriverConnect)")

我的配置设置错了吗?我应该更新我的设置吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-17 21:27:50

我设法解决了这个问题。因为我在linux中同时运行Django应用程序和MS,所以我需要将我的驱动程序更改为FreeTDS。这个链接很有用:How to install freetds in Linux?

在我的主机(Ubuntu)上安装FreeTDS驱动程序之后,我更新了数据库设置如下:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'videogame',
        'USER': 'sa',
        'PASSWORD': 'xxxxx',
        'HOST': 'localhost',
        'PORT': '8888',
        'OPTIONS' : {
            'driver': 'FreeTDS',
            'unicode_results': True,
            'host_is_server': True,
            'extra_params': 'tds_version=7.0;',
            }
    }
}

然后使用以下命令创建超级用户:

代码语言:javascript
复制
python manage.py createsuperuser

最后,我做了数据库迁移:

代码语言:javascript
复制
python manage.py makemigrations; python manage.py migrate
票数 1
EN

Stack Overflow用户

发布于 2016-12-17 20:21:06

我想您是在Windows上托管,因为您试图连接到localhost。我强烈建议使用django-pyodbc-azure引擎(https://github.com/michiya/django-pyodbc-azure),因为它既可以用于本地Server,也可以用于Azure,并且是我几年来所见过的维护最好的Django Server包。安装:

代码语言:javascript
复制
pip install django-pyodbc-azure

这还将安装pyodbc依赖项。因为您在Windows上运行Django (否则,您不会连接到本地主机),所以可以使用本机客户端。以下是我从你的设置开始的内容:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'videogame',
        'USER': 'kucing',
        'PASSWORD': 'xxxxx',
        'HOST': 'localhost',
        'PORT': '8888',

        'OPTIONS': {
            'driver': 'SQL Server Native Client 13.0',
        },
    },
}

此外,您应该永远不要发布您的密码在堆栈溢出!我强烈建议改变它。通常情况下,如果您将密码发布为xxxxx或诸如此类的东西,人们会理解原因。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41202467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档