我无法找出正确的方式来安排从 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/