给定数据库的 ODBC 连接字符串,如何修改我的 settings.py 以便我的 Django 应用程序连接到它?
Posted
技术标签:
【中文标题】给定数据库的 ODBC 连接字符串,如何修改我的 settings.py 以便我的 Django 应用程序连接到它?【英文标题】:Given an ODBC connection string for a database, how can I modify my settings.py such that my Django app will connect to it? 【发布时间】:2018-12-31 18:45:07 【问题描述】:我得到了一个 ODBC 连接字符串来连接数据库。但是,我很难让我的 Django 应用程序连接到它。让我的应用程序连接到它的正确步骤是什么?我的代码中是否遗漏了任何内容?
这是我的连接字符串:
Driver=SQL Anywhere 17;uid=user;pwd=secret;server=databasename;astart=No;host=127.0.0.1;port=1234
通过使用 pyodbc 的测试脚本,我能够连接到数据库。但是,当我尝试修改我的应用程序的 settings.py 文件时,它无法连接到数据库。
Requirements.py
django~=2.1.4
pyodbc~=4.0.25
django-pyodbc-azure~=2.1.0.0
Settings.py
#First Attempt
DATABASES =
'default':
'ENGINE': 'sql_server.pyodbc',
'HOST': '127.0.0.1,1234',
'USER': 'user',
'PASSWORD': 'secret',
'NAME': 'databasename',
'PORT': '1234',
'OPTIONS':
'driver' : 'SQL Anywhere 17',
'host_is_server': 'True',
,
#Second Attempt
DATABASES =
'default':
'ENGINE': 'sql_server.pyodbc',
'HOST': '',
'NAME': 'databasename;',
'PORT': '',
'OPTIONS':
'host_is_server': 'True',
'dsn': 'Driver=SQL Anywhere 17;uid=user;pwd=secret;server=databasename;astart=No;host=127.0.0.1;port=1234'
,
对于我的第一次尝试,我收到以下错误:
django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
对于我的第二次尝试,我收到以下错误:
django.db.utils.Error: ('IM010', '[IM010] [Microsoft][ODBC Driver Manager] Data source name too long (0) (SQLDriverConnect)')
我不确定我做错了什么。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:欢迎来到 Stack Overflow,本杰明!试试这个:
DATABASES =
"default":
"ENGINE": "sql_server.pyodbc",
"HOST": "127.0.0.1",
"PORT": "1234",
"NAME": "databasename",
"USER": "user",
"PASSWORD": "secret",
"AUTOCOMMIT": True,
"OPTIONS":
"driver": "SQL Anywhere 17",
"unicode_results": True,
"host_is_server": True,
,
,
这里的一个关键是"driver"
设置。它必须与您的odbcinst.ini
文件中的驱动程序部分的标题相匹配。例如,我的/etc/odbcinst.ini
中有以下内容:
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1
就我而言,我在OPTIONS
字典中使用:"driver": "ODBC Driver 17 for SQL Server",
,因此它与odbcinst.ini
配置文件中的标题相匹配。这是我看到大多数人被绊倒的地方。祝你好运!
【讨论】:
我应该提到我正在使用 Windows Powershell。深入研究我的问题,我看到客户端正在使用 SQL Anywhere 12。我还找到了 ODBC.ini 文件并使用“SQL Anywhere 12 CustDB”作为驱动程序,导致以下错误:django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
以上是关于给定数据库的 ODBC 连接字符串,如何修改我的 settings.py 以便我的 Django 应用程序连接到它?的主要内容,如果未能解决你的问题,请参考以下文章
ODBC 连接凭据如何存储在 MS Access 中? [关闭]