我是Django的新手,目前正在尝试使用另一个数据库来保存我的模型(即MS SQL
)。我的数据库部署在一个docker容器中:
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
我还为登录SQL Server创建了一个新用户。
Username='kucing', password='xxxxx'
对于我的用户,我可以使用sqlcmd访问我的数据库,如下所示:
sqlcmd -S localhost,8888 -U kucing -P 'xxxxx'
因此,我更改了我的DB的Django设置,如下所示:
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
时,我收到与身份验证相关的错误:
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)")
我是否错误地设置了配置?我应该更新我的设置吗?
答案 0 :(得分:0)
我认为您已在Windows上托管,因为您尝试连接localhost
。我强烈建议使用django-pyodbc-azure
引擎(https://github.com/michiya/django-pyodbc-azure),因为它可以用于本地SQL Server或Azure,并且是维护得最好的Django SQL Server程序包I'已经看过几年的使用。要安装:
pip install django-pyodbc-azure
这也将安装pyodbc
依赖项。由于您在Windows上运行Django(否则,您将无法连接到localhost),您可以使用本机客户端。以下是我为您的设置开始的内容:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'videogame',
'USER': 'kucing',
'PASSWORD': 'xxxxx',
'HOST': 'localhost',
'PORT': '8888',
'OPTIONS': {
'driver': 'SQL Server Native Client 13.0',
},
},
}
此外,您应该永远在Stack Overflow上发布您的密码!我强烈建议改变它。通常情况下,如果您将密码发布为xxxxx
或类似的内容,人们就会明白原因。祝你好运!
答案 1 :(得分:0)
我已经设法解决了这个问题。因为,我在Linux中运行Django应用程序和MS SQL服务器,我需要将驱动程序更改为FreeTDS
。
此链接很有用:How to install freetds in Linux?
在我的主机(Ubuntu)上完成FreeTDS驱动程序的安装后,我更新了数据库设置,如下所示:
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;',
}
}
}
然后我使用此命令创建超级用户:
python manage.py createsuperuser
最后,我进行数据库迁移:
python manage.py makemigrations; python manage.py migrate