跳转到主要内容

使用Python 2/3或Jython的JDBC数据库驱动程序,并通过DB-API进行访问。

项目描述

https://img.shields.io/travis/baztian/jaydebeapi/master.svg https://img.shields.io/coveralls/baztian/jaydebeapi/master.svg https://img.shields.io/badge/python-2.7,_3.5,_3.6-blue.svg https://img.shields.io/badge/jython-2.7.2-blue.svg https://img.shields.io/github/tag/baztian/jaydebeapi.svg https://img.shields.io/pypi/dm/JayDeBeApi.svg

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) 下发布。有关详细信息,请参阅发行版中的 COPYINGCOPYING.LESSER 文件。

变更日志

  • 下一个版本 - 未发布

  • 1.2.3 - 2020-06-12

    • 通过将 JPype1 要求更改为旧版本,使 pip 安装对 Python 2 的工作

    • 通过删除 Jython 对 JPype1 的要求,使 pip 安装对 Jython 的工作

    • 删除了游标析构函数以避免与某些 JPype 版本的问题(请确保您始终正确关闭游标)

  • 1.2.2 - 2020-06-04

    • 如果刻度为零,则将(大)十进制类型作为长值返回(感谢 @ministat)

    • 修复了 Jython 中的 DECIMALNUMERIC 类型转换

  • 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 (32.9 kB 查看散列值)

上传时间 源代码

构建的分发

JayDeBeApi-1.2.3-py3-none-any.whl (26.3 kB 查看散列值)

上传时间 Python 3

JayDeBeApi-1.2.3-py2-none-any.whl (26.3 kB 查看散列值)

上传时间 Python 2

支持