簡體   English   中英

給定數據庫的 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?

我得到了一個 ODBC 連接字符串來連接到數據庫。 但是,我很難讓我的 Django 應用程序連接到它。 讓我的應用程序連接到它的正確步驟是什么? 我的代碼中是否缺少任何內容?

這是我的連接字符串:

Driver={SQL Anywhere 17};uid=user;pwd=secret;server=databasename;astart=No;host=127.0.0.1;port=1234

使用使用 pyodbc 的測試腳本,我能夠連接到數據庫。 但是,當我嘗試修改我的應用程序的 settings.py 文件時,它無法連接到數據庫。

需求.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,
        },
    },
}

這里的一個關鍵是"driver"設置。 它必須與odbcinst.ini文件中驅動程序部分的標題相匹配。 例如,我的/etc/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配置文件中的標題匹配。 這是我見過大多數人被絆倒的地方。 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM