python - Python连接到firebird docker数据库
问题描述
我有一个mydb.fdb
文件,如何将它加载到 docker 容器中,然后从 python 连接到它。我在我的 docker-compose 中执行以下操作:
version: '2'
services:
firebird:
image: jacobalberty/firebird
environment:
ISC_PASSWORD: pass
volumes:
- ./database:/databases
然后我做:
docker exec -it <container-id> bin/bash
我在容器中的文件夹.fdb
内看到我的文件/databases
,但是当我在容器内执行命令时:
cd /usr/local/firebird/bin
./isql
SQL> CONNECT "/databases/mydb.FDB" user sysdba password masterkey;
我收到了:
服务器配置不允许使用位于 /databases/mydb.FDB 的数据库
而且我不明白如何通过fdb python 模块连接到这个数据库。我愿意:
import fdb
con = fdb.connect(
host='0.0.0.0',
port='3050',
database='mydb.FDB',
user='sysdba',
password='masterkey')
并收到:
raise Exception("无法确定 Firebird 客户端库的位置。")
解决方案
您的问题中有两个不同的问题,将来,请确保将它们作为单独的问题提出。
至于您的第一个问题,默认情况下,Firebird docker 映像的设置需要位于 location 中的数据库/firebird/data
,并明确配置 Firebird 以限制仅访问该位置。如果要使用不同的位置,则必须将环境变量设置DBPATH
为正确的路径。另见issue 12,Dockerfile和镜像的build.sh。这个选项似乎没有记录;我已经对那张票发表了评论。
至于你的第二个问题,它有两个部分。一、不能用0.0.0.0连接,那只是“本主机所有ip地址”的简写,只能在监听连接时使用,不能在连接时使用。从运行 docker 的机器连接时,您需要使用 127.0.0.1 或 localhost。
最重要的是,该错误表明您没有安装 Firebird 本机客户端。FDB 驱动程序需要fbclient.dll
(Windows) 或libfbclients.so
(Linux)。您要么需要安装 Firebird 本地客户端,要么切换到pyfirebirdsql,它是纯 Python 中的 Firebird 驱动程序(它在 Python 中实现了 Firebird 协议)。
推荐阅读
- python - 如果在 python 的 socket recv 方法上 10 分钟内没有收到数据,如何设置关闭套接字的超时并杀死线程?
- python-3.x - “TypeError:'NoneType' 对象不可下标”是什么意思?
- python - 如何将变量从父类传递给子类?
- angular - 对于 angular 中的自定义自动完成功能,模糊事件无法按预期工作
- c# - System.MissingMethodException:'找不到方法:'无效 Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.set_AllowAreas(Boolean)'。
- javascript - 为什么点击时会从 iframe 中删除属性?
- sql - 使用两个更新,其中第二个更新语句使用第一个更新语句中的列作为输入
- python - 使用 Python 的 fastText:计算准确性
- rust - 无法移出“不和谐”,这是“FnMut”闭包中捕获的变量
- .net-core - 是什么导致 Docker 映像中出现“找不到数据收集器‘XPlat 代码覆盖率’”错误?