python - 给定数据库的 ODBC 连接字符串,我如何修改我的 settings.py 以便我的 Django 应用程序连接到它?

标签 python django django-pyodbc

我得到了一个 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

设置.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)')

我不确定我做错了什么。任何帮助将不胜感激。

最佳答案

本杰明,欢迎来到 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,
        },
    },
}

此处的关键是“驱动程序” 设置。它必须与 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 配置文件。这是我见过大多数人被绊倒的地方。祝你好运!

关于python - 给定数据库的 ODBC 连接字符串,我如何修改我的 settings.py 以便我的 Django 应用程序连接到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53990510/

相关文章:

Python请求Json数据,想将其从excel复制回csv文件

python - 导入错误 : No module named testrunner

python - django 是否有像 Rails 有 Liquid 一样安全的用户可编辑模板语言?

python - django-pyodbc-azure SQL Server 参数限制

python - 将 bin 应用于 groupby 的 pandas value_counts 产生不正确的结果

Python~每周一天/一周的时间监视器

Django:禁止(未设置CSRF cookie。)

python - 控制 Django 中的原子事务

python - 尝试使用 django-pyodbc-azure 连接到 MSSQL 导致找不到文件错误

sql-server - django:数据库驱动程序不支持现代数据时间类型