使用Python 2/3或Jython的JDBC数据库驱动程序,并通过DB-API进行访问。
项目描述
The JayDeBeApi模块允许您通过Java JDBC 使用Python代码连接到数据库。它为该数据库提供了一个Python DB-API v2.0。
它可以在普通的Python(cPython)中使用JPype Java集成或在Jython中使用以利用Java JDBC驱动程序。
与Jython项目的zxJDBC相比,JayDeBeApi允许您通过仅进行少量代码修改即可使用Jython和Python访问数据库。JayDeBeApi的未来的目标是提供一个独特且快速的接口,通过灵活的插件机制访问不同类型的JDBC-驱动程序。
安装
您可以使用pip获取和安装JayDeBeApi。
$ pip install JayDeBeApi
如果您想在 Jython 中安装 JayDeBeApi,请确保有 pip 或 EasyInstall 可用。
或者,您也可以通过从 JayDeBeApi github 项目 克隆源代码,并使用以下命令安装:
$ python setup.py install
如果您使用的是 Jython,则使用以下命令:
$ jython setup.py install
它已经在 Jython 2.7.2 上进行了测试。
如果您使用的是 cPython,请确保您已正确安装 JPype。它已与 Python 3 的 JPype1 0.6.3 和 0.7.5 以及 Python 2.7 的 JPype1 0.6.3 和 0.7.0 进行了测试。较旧的 JPype 安装可能会引起问题。
使用
基本上,您只需要导入 jaydebeapi Python 模块并执行 connect 方法。这将为数据库提供一个符合 DB-API 的连接。
connect 方法的第一个参数是 Java 驱动类名。第二个参数是一个包含 JDBC 连接 URL 的字符串。第三个参数可以是一个包含用户名和密码的序列,或者是一个包含作为属性传递给 Java DriverManager.getConnection 方法的参数的字典。有关详细信息,请参阅 DriverManager 类的 Javadoc。
connect 方法的下一个参数也是可选的,它指定了驱动程序的 jar 文件,如果您的类路径尚未设置充分。在 CLASSPATH 环境变量中设置的类路径将被尊重。请参阅您的 Java 运行时环境的文档。
以下是一个示例:
>>> import jaydebeapi >>> conn = jaydebeapi.connect("org.hsqldb.jdbcDriver", ... "jdbc:hsqldb:mem:.", ... ["SA", ""], ... "/path/to/hsqldb.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()
如果您在使此工作遇到困难,请检查您的 JAVA_HOME 环境变量是否设置正确。例如,我必须在我的 Ubuntu 机器上按以下方式设置它:
$ JAVA_HOME=/usr/lib/jvm/java-8-openjdk python
使用连接属性建立连接的另一种方法
>>> conn = jaydebeapi.connect("org.hsqldb.jdbcDriver", ... "jdbc:hsqldb:mem:.", ... {'user': "SA", 'password': "", ... 'other_property': "foobar"}, ... "/path/to/hsqldb.jar",)
使用 with 语句也可能很有用
>>> with jaydebeapi.connect("org.hsqldb.jdbcDriver", ... "jdbc:hsqldb:mem:.", ... ["SA", ""], ... "/path/to/hsqldb.jar",) as conn: ... with conn.cursor() as curs: ... curs.execute("select count(*) from CUSTOMER") ... curs.fetchall() [(1,)]
支持的数据库
理论上,每个具有合适 JDBC 驱动程序的数据库都应该工作。已确认以下数据库可以工作:
SQLite
Hypersonic SQL (HSQLDB)
IBM DB2
IBM DB2 for mainframes
Oracle
Teradata DB
Netezza
Mimer DB
Microsoft SQL Server
MySQL
PostgreSQL
等等...
贡献
请提交 错误和补丁。所有贡献者都将得到认可。谢谢!
许可证
JayDeBeApi 在 GNU Lesser General Public license (LGPL) 下发布。有关详细信息,请参阅发行版中的 COPYING 和 COPYING.LESSER 文件。
变更日志
下一个版本 - 未发布
1.2.3 - 2020-06-12
通过将 JPype1 要求更改为旧版本,使 pip 安装对 Python 2 的工作
通过删除 Jython 对 JPype1 的要求,使 pip 安装对 Jython 的工作
删除了游标析构函数以避免与某些 JPype 版本的问题(请确保您始终正确关闭游标)
1.2.2 - 2020-06-04
如果刻度为零,则将(大)十进制类型作为长值返回(感谢 @ministat)
修复了 Jython 中的 DECIMAL 和 NUMERIC 类型转换
1.2.1 - 2020-05-27
提高了线程安全性。应该解决一些 未找到合适的驱动程序 错误(感谢 @thealmightygrant)
1.2.0 - 2020-05-22
增加了对 JPype1 0.7.2+ 的兼容性(感谢 @dpd)
支持 with 语句(感谢 @Szczepanov)
1.1.2 - 2019-09-02
增加了对 JPype1 0.7 的兼容性(感谢 @Iverian, @Thrameos)
停止支持 python 2.6
修复了与较新 Maven 版本一起构建的问题
意外地将更改推送到 master 分支。为此表示歉意。
1.1.1 - 2017-03-21
在 Python < 3 上不失败于 1900 年前的日期。
1.1.0 - 2017-03-19
支持 BIT 和 TINYINT 类型映射(感谢 @Mokubyow 报告的问题)
1.0.0 - 2017-01-10
允许将 db 属性传递给 connect 方法。可能与基于先前版本的代码不兼容。请参阅 connect 方法的文档。(感谢 @testlnord 的努力和耐心。)
由于可能的 API 不兼容性,推出新的主要版本。
0.2.0 - 2015-04-26
支持 Python 3(需要 JPype1 >= 0.6.0)。
0.1.6 - 2015-04-10
修复了 Jython 处理不继承自 python Exception 的 Java 异常的问题
将异常丰富化,添加来自java SQLExceptions的消息
关于DB API异常描述更具体:区分DatabaseError和InterfaceError。
修复了typo LONGNARCHAR与LONGVARCHAR(感谢@datdo报告#4)
0.1.5 - 2015-03-02
向模块添加版本号。
提高java到python类型转换的健壮性。
支持Time类型。
添加DB-API兼容的异常处理。
少量文档改进。
一些与开发相关的更改(在github上托管项目,使用Travis CI,使用JPype1进行测试)。
0.1.4 - 2013-10-29
更方便地设置Java类路径。 重要提示 检查对connect方法的更改并适配您的代码。
在JPype模式下尊重CLASSPATH。
正确设置.rowcount。
将.setoutputsize()的签名更改为DB-API兼容。
0.1.3 - 2011-01-27
修复了违反DB-API的问题:使用curs.execute('foo ?', (bar, baz))代替curs.execute('foo ?', bar, baz)。
在executemany调用后释放资源。
改进类型处理。初始支持BLOB列。
0.1.2 - 2011-01-25
使用easy_install JayDeBeApi应该真的可以工作。
0.1.1 - 2010-12-12
修复了bug #688290 “转换器错误时获取NULL值”。
修复了bug #684909 “在获取时选择ROWIDs出错”。
0.1 - 2010-08-10
初始版本。
待办事项
将Java调用提取到单独的Java方法中以提高性能。
检查https://code.launchpad.net/dbapi-compliance是否可以帮助使JayDeBeApi更符合DB-API。
在不同的数据库上测试并提供灵活的数据库特定插件机制。
SQLAlchemy模块(独立项目)
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定要选择哪一个,请了解更多关于安装包的信息。
源代码分发
构建的分发
JayDeBeApi-1.2.3.tar.gz的散列值
算法 | 散列值 | |
---|---|---|
SHA256 | f25e9307fbb5960cb035394c26e37731b64cc465b197c4344cee85ec450ab92f |
|
MD5 | 55770b87148b173434535d84ff33f7c6 |
|
BLAKE2b-256 | 5c8cf27750106bf1fba33f92d83fb866af164179f7046495bc5a61fae26d9475 |