Python操作Firebird,各种踩坑终归不辱使命

2022-03-17 00:00:00 中文 安装 脚本 替换 引号

本篇内容:

  • Python连接Firdbird

  • 安装Firebird Client(Win64 和 Mac OS)

  • 坑1:数据库管理工具的中文

  • 坑2:Python脚本中的引号

  • 修正脚本 & 整体源码



01

Python连接Firebird


步骤:

  • 安装fdb:pip install fdb

  • 安装Firebird客户端

  • 编写脚本,测试连接


FDB 是基于Firebird客户端库文件(fbclient.so/dll),用c*写的纯python模块,因此,使用FDB前,要确保firebird客户端正确安装


02

安装Firebird Client


那么,如何安装Firebird Client?


在我的工作中,要用Mac和Win64,在这两个系统中安装Firebird Client时,遇到的问题不一样,所以,都记录一下


官网:

http://firebirdsql.org/en/firebird-3-0/


安装完成,Win64系统连接Firebird的Python脚本就通了


Mac OS,下载pkg安装后,建立软连接:

sudo ln -s /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libfbclient.dylib /usr/local/lib/libfbclient.dylib


在python脚本中,添加「fb_library_name='libfbclient.dylib'」

03

坑1:数据库管理工具的中文


有没有类似Navicat的工具,方便管理Firebird数据库?


我用的是「DBeaver」(之前还用过一个其它的,需要破解,太麻烦了)

DBeaver不需要破解


DBeaver连接数据库后,中文是乱码

没找到方法怎么让它正确展示中文


但是,用Python脚本读取出来,中文可以正确展示

所以,我没理会DBeaver中文展示乱码的问题


因为要往Firebird数据库中插入数据,我把脚本中要用的Insert语句,复制到DBeaver中执行,以验证SQL是否正确


结果,总是出现下图的错误

我以为我的SQL写的不对,调了半天


后,发现python脚本执行该SQL是通过的

我把DBeaver中执行SQL,中文改成字母和数字,调试也通过了


几经倒腾,我发现原来是SQL语句中的「性别」乱码时展示的是「'Ů'」

将该字符替换为「'男'」会报上图的SQL错误

若替换为「'1'」或「'y'」等非中文字符,或保持原来的「'Ů'

则可以成功


我想这和字符的长度占位有关,果然,我把「性别」替换为「'aa'」没有问题

替换为「'aaa'」则又出现上图的SQL错误



04

坑2:Python脚本中的引号


这是我犯的一个低级错误


我在编写python脚本的过程中,习惯用单引号

当字符串中还需要引号时,我会用双引号或三引号


就是下图,双引号套单引号

如若把「id='{}'」写成了单引号套双引号,即「id="{}"」,是要报错的哦


DBeaver中执行SQL语句,也是一样的


05

修正脚本 & 整体源码


后,回到之前的文章:《在测试工作中,会点代码,是怎样的体验--- 用Python编程实现了,往Oracle数据库插入上游数据

第4节,修正一下脚本的异常处理「try...except」应是「try...finally

后,整体的源码

来源 https://mp.weixin.qq.com/s/BQb0lW6R2ufd-_DKQEacNQ

相关文章