【发布时间】:2020-11-10 18:43:09
【问题描述】:
更新:我在 odbc.log 的错误中添加了更多行,因为用户建议可能是其他问题。
我在尝试连接到远程数据库(在不同的服务器上)时遇到了 docker 和 django 的问题。
使用 Python 3.4 和 django 1.9.7。我可以在本地运行时很好地执行 runserver,并且可以在 docker 容器中使用 tsql 或 pyodbc.connect() 进行连接。但是,在项目的 docker 容器上执行 runserver 时,我收到以下错误:
[ODBC][14][1604961520.418108][SQLDriverConnectW.c][290]
条目:
连接 = 0x7f48618ecba0
窗口 Hdl = (nil)
Str In = [UID={{UID}};PWD={{password}};DRIVER=FreeTDS;SERVER={{serverIP}};DATABASE={{databaseName}};unicode_results=True;][length = 110]
力量输出 = (nil)
最大强度 = 0
Str Out Ptr = (nil)
完成 = 0
UNICODE 使用编码 ASCII 'UTF-8' 和 UNICODE 'UTF-16LE'
[ODBC][14][1604961520.444358][SQLDriverConnectW.c][848]
退出:[SQL_ERROR]
[ODBC][14][1604961520.444418][SQLDriverConnect.c][748]
条目:
连接 = 0x7f48618ecba0
窗口 Hdl = (nil)
Str In = [UID={{UID}};PWD={{password}};DRIVER=FreeTDS;SERVER={{serverIP}};DATABASE={{databaseName}};unicode_results=True;][length = 110]
力量输出 = 0x7f4865297db0
最大强度 = 2048
Str Out Ptr = (nil)
完成 = 0
DIAG [08001] [FreeTDS][SQL Server]无法连接到数据源
安装了多个驱动程序管理器,而您的应用程序使用了错误的驱动程序管理器,或者驱动程序管理器未正确构建。
我已经尝试了所有我能想到的东西,但我觉得我在这里忽略了一些非常明显的东西,但是我没有运气弄清楚这个错误,或者我什至使用了多个驱动程序(如果是这样的话如何解决)。
这里是其他相关的设置文件,也许有人会发现一些东西或有一个想法。非常感谢任何帮助,感谢您的宝贵时间!
django 数据库设置.py
settings['DATABASES'] = {
'default': {
'HOST': '{{serverIP}}',
'NAME': '{{databaseName}}',
'ENGINE': 'sql_server.pyodbc',
'USER': '{{UID}}',
'PASSWORD': '{{password}}',
'OPTIONS': {
'unicode_results': True,
'host_is_server': True
}
},
}
odb.ini
[UAT_SERVER]
Description = UAT Database
Driver = FreeTDS
Database = {{databaseName}}
Servername = UAT_SERVER //I have also tried using the server IP here with no luck
Port = 1433
TDS Version = 4.2
odbcinst.ini
[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log
[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
TDS_Version = 4.2
Trace = Yes
TraceFile = /tmp/freetds.log //This seems to do nothing, as no file is created.
ForceTrace = Yes
freetds.conf
[UAT_SERVER]
host = {{server ip}}
port = 1433
database= {{databaseName}}
tds version = auto
【问题讨论】:
-
我可能是错的,但它看起来不像您突出显示的 Unicode 错误。感觉更多的是关于如何建立连接的信息
-
这是可能的。这是我第一次为一个项目设置一个 docker 容器,这是一条崎岖不平的道路。我可以提供更多可能有用的信息吗?
-
您可以将odbcinst 添加到您的项目中,然后让您的应用程序的启动代码显示(或记录,或以其他方式披露)
odbcinst.j()返回的结果。这可能至少表明 unixODBC 已按您的预期设置。 -
我这样做了(需要升级到 python 3.5 才能这样做)。看起来我确实能够出现一个不同的错误。我注意到 odbcinst.ini 不在预期的用户目录中,所以在创建容器时我将它复制了过来。从那里我收到错误“无法连接:Adaptive Server 不可用或不存在”。我现在正在追这个,稍后会再次发表评论!感谢您迄今为止的帮助!
标签: python django docker pyodbc