python - 无法从 Docker 连接到数据库

标签 python linux docker odbc pyodbc

我无法找出正确的方式来安排从 Docker 容器连接到外部数据库所需的配置文件。整个东西都在 Windows 上运行,Docker 是 Debian,我根据 this tutorial 使用 FreeTDS建立联系。我也一直在关注 this SO question 中的建议.

借助非常有用的 Flask 调试器,我可以判断我正在使用以下连接字符串连接到服务器:

'DSN=server_name; DATABASE=db_name; UID=usr; PWD=pw'

这些是我的配置文件的内容:

# odbcinst.ini in /etc/ and /
[FreeTDS]
Description = FreeTDS driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

# odbc.ini in /etc/ and /root/.odbc.ini
[data_source]
Driver = FreeTDS
Servername = server_name
Port = 1433
Database = db_name

# freetds.conf in /etc/freetds/
[global]
tds version = 7.4

[server_name]
host = server_ip
port = 1433

[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)

但是,我可以使用 tsql -H server_ip -p 1433 -U usr -P pw 通过命令行连接到数据库。 isql -v data_source username pwd 也可以。 osql 给出以下错误:

path/libtdsodbc.so is not an executable file

osql: error: no driver found for data_source

我想不通这个问题.. 没有帮助我对 Linux 也很缺乏经验。非常感谢任何帮助!

最佳答案

我在 this answer 的帮助下设法解决了这个问题在链接的问题上。这不是一个直接的修复,因为配置仍然无法正常工作,但它是一个旁路并且足够好。

技巧是使用关键字参数而不是连接字符串调用 pyodbc.connect。从链接复制:

import pyodbc

conn = pyodbc.connect(
    driver = 'FreeTDS',
    TDS_Version = '7.4',
    server = '<hostname or ip address>',
    port = 1433,
    database = '<database>',
    uid = '<uid>',
    pwd = '<pwd>'
)

修复特别奇怪,因为我认为 PyODBC 的官方 Wiki 根本没有提到关键字参数版本。

此外,现在配置只需要odbcinst.ini文件,这样至少可以省去容器构建的一些麻烦。

关于python - 无法从 Docker 连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51841092/

相关文章:

linux - 使用链接器标志复制 dlopen 的 RTLD_DEEPBIND 行为

java - 单节点 Cassandra 集群有什么限制?

docker - 如何在Docker机器上安装apt?

Python - 提高我的算法速度

python - 访问 pandas 数据框中单行的推荐方法?

php - 阻止浏览器访问php文件

php - 需要在 Ubuntu 上使用 PHP 查找网络接口(interface)的 IP 地址

docker - 是否可以使用动态IP从网络托管Kubernetes节点?

python - 使用 Marketo API 的结果不一致 - 无法找到事件 ID

python - 这个程序如何运作? firstGreaterEqual 方法如何工作