python+jaydebeapi连接不同类型的数据库

使用jaydebeapi连接不同类型的数据库

若是behave构建的项目,建议使用behave-db,详见 https://github.com/M-HALLIDAY/behave-db

1. 背景

需求是程序的运行环境是不确定的,可能是Windows,也可能是linux,数据库也是多种多样的(mysql、oracle、pg等),但是所需要执行的sql语句都是相同的,如何做很小的改动就能够执行相同的sql语句。

2.jaydebeapi

jaydebeapi是一个python模块,可通过它来使用java的JDBC来连接数据库。

简单来说,目前几乎所有的数据库都是支持jdbc的,因此几乎都能找到相应的jar包,通过jaydebeapi这个库,只需要把jra放到指定的位置,然后在程序中使用它即可连接数据库。

优点:

  1. 支持的数据库种类多,只要有jar包就可以。

  2. 不需要关心过于程序的运行环境,只要是相同平台下编译出来的包,复制过来就可以直接运行。

缺点:

打包的时候需要连同jar包一起打,可能会导致安装包过大。

2.1 安装

1
pip install JayDeBeApi

2.2 核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

>>> import jaydebeapi
>>> conn = jaydebeapi.connect("org.hsqldb.jdbcDriver", # 包名
... "jdbc:hsqldb:mem:.", # JDBC连接串
... ["SA", ""], # 用户名密码
... "/path/to/hsqldb.jar",) # jar包存放的位置
>>> curs = conn.cursor()
>>> curs.execute('create table CUSTOMER'
... '("CUST_ID" INTEGER not null,'
... ' "NAME" VARCHAR(50) not null,'
... ' primary key ("CUST_ID"))'
... )
>>> curs.execute("insert into CUSTOMER values (?, ?)", (1, 'John'))
>>> curs.execute("select * from CUSTOMER")
>>> curs.fetchall()
[(1, u'John')]
>>> curs.close()
>>> conn.close()