Firebird+SQLAlchemy连接含西里尔文路径数据库报错求助
解决Firebird数据库路径含西里尔文的连接问题
问题描述
我尝试用以下Python代码连接路径包含西里尔文的Firebird数据库:
path_to_fdb = 'D:/базы/mydb.FDB' db_url = f'firebird+fdb://sysdba:masterkey@localhost/{path_to_fdb}?charset=utf8' engine = sqlalchemy.create_engine(db_url) conn = engine.connect()
但始终报错,错误信息如下:
(fdb.fbcore.DatabaseError) ('Error while connecting to database:\n- SQLCODE: -902\n- I/O error during "CreateFile (open)" operation for file "D:/базы/mydb.FDB"\n- Error while trying to open file\n- Системе не удается найти указанный путь. ', -902, 335544344)
路径显示为乱码(如D:/базы/mydb.FDB),仅含拉丁字符的路径可正常连接。尝试对path_to_fdb使用不同编码的.encode()和.decode()方法均无效,推测sqlalchemy-firebird或fdb无法识别数据库路径中的西里尔文,寻求其他连接方法。
环境版本:Firebird 2.5,SQLAlchemy2.0.30,sqlalchemy-firebird2.1,fdb2.0.2,firebird-base1.8.0,firebird-driver==1.10.4
解决方案
方法1:切换到firebird-driver连接
fdb对非拉丁字符路径的支持存在局限,firebird-driver在Unicode路径处理上更稳定。修改连接代码如下:
from sqlalchemy import create_engine path_to_fdb = 'D:/базы/mydb.FDB' engine = create_engine( f'firebird://sysdba:masterkey@localhost/{path_to_fdb}', connect_args={'charset': 'utf8'}, module='firebird.driver' ) conn = engine.connect()
若未安装firebird-driver,执行pip install firebird-driver完成安装。
方法2:使用Windows短路径(8.3格式)
将含西里尔文的路径转换为Windows原生短路径(纯拉丁字符):
- 打开命令行,执行
dir /x D:\,找到базы对应的短路径名称(示例:BAZY~1) - 替换代码中的路径:
path_to_fdb = 'D:/BAZY~1/mydb.FDB' db_url = f'firebird+fdb://sysdba:masterkey@localhost/{path_to_fdb}?charset=utf8' engine = sqlalchemy.create_engine(db_url) conn = engine.connect()
此方法直接绕开Unicode编码问题,兼容性更强。
方法3:手动URL编码路径
对路径进行URL编码,确保西里尔字符被正确转义:
from urllib.parse import quote import sqlalchemy path_to_fdb = 'D:/базы/mydb.FDB' encoded_path = quote(path_to_fdb, encoding='utf-8') db_url = f'firebird+fdb://sysdba:masterkey@localhost/{encoded_path}?charset=utf8' engine = sqlalchemy.create_engine(db_url) conn = engine.connect()
强制URL中的特殊字符被正确解析,避免乱码导致的路径识别错误。
内容的提问来源于stack exchange,提问作者Kreol
相关产品推荐
相关产品推荐

