Skip to main content

A bridge from JDBC database drivers to Python DB-API.

Project description

The JayDeBeApi module allows you to connect from Python code to databases using Java JDBC. It provides a Python DB-API v2.0 to that database.

It works on ordinary Python (cPython) using the JPype Java integration or on Jython to make use of the Java JDBC driver.

In contrast to zxJDBC from the Jython project JayDeBeApi let’s you access a database with Jython AND Python with only minor code modifications. JayDeBeApi’s future goal is to provide a unique and fast interface to different types of JDBC-Drivers through a flexible plug-in mechanism.

Install

You can get and install JayDeBeApi with easy_install

$ easy_install JayDeBeApi

If you want to install JayDeBeApi in Jython make sure to have EasyInstall available for it.

Or you can get a copy of the source branch using bzr by running

$ bzr branch lp:jaydebeapi

and install it with

$ python setup.py install

or if you are using Jython use

$ jython setup.py install

It has been tested with Jython 2.5.2.

If you are using cPython ensure that you have installed JPype properly. It has been tested with JPype 0.5.4.

Usage

Basically you just import the jaydebeapi Python module and execute the connect method. This gives you a DB-API conform connection to the database.

The first argument to connect is the name of the Java driver class. The rest of the arguments are internally passed to the Java DriverManager.getConnection method. See the Javadoc of DriverManager class for details.

Here is an example:

>>> import jaydebeapi
>>> conn = jaydebeapi.connect('org.hsqldb.jdbcDriver',
...                           'jdbc:hsqldb:mem', 'SA', '')
>>> curs = conn.cursor()
>>> curs.execute('create table CUSTOMER'
...                '("CUST_ID" INTEGER not null,'
...                ' "NAME" VARCHAR not null,'
...                ' primary key ("CUST_ID"))'
...             )
>>> curs.execute("insert into CUSTOMER values (1, 'John')")
>>> curs.execute("select * from CUSTOMER")
>>> curs.fetchall()
[(1, u'John')]

You probably have to configure Jython or JPype to actually be able to access the database driver’s jar files. If I want to connect to a HSQL in memory database on my Ubuntu machine I’m starting Python by running

$ JAVA_HOME=/usr/lib/jvm/java-6-openjdk python

Now I have to configure JPype

>>> import jpype
>>> jar = r'/path/to/my/driver/hsqldb.jar'
>>> args='-Djava.class.path=%s' % jar
>>> jvm_path = jpype.getDefaultJVMPath()
>>> jpype.startJVM(jvm_path, args)

or in Jython I have to

>>> jar = '/path/to/my/driver/hsqldb.jar'
>>> import sys
>>> sys.path.append(jar)

Supported databases

In theory every database with a suitable JDBC driver should work. It is known to work with the following databases:

Database

JDBC driver

Supported

Remarks

SQLite 3

SqliteJDBC v056

Good

Can’t interpret selected BLOBs correctly.

Sqlite Java Wrapper javasqlite-20110106-win32

Medium

Weird type handling.

Hypersonic SQL (HSQLDB) 1.8.1.3

Builtin

Very Good

No BLOB support by database.

Hypersonic SQL (HSQLDB) 2

Builtin

Medium

Weird decimal type conversions. No BLOB support.

IBM DB2 for z/OS

JDBC type 4 drivers from IBM (db2jcc.jar)

Medium.

Not thoroughly tested but seems to work without problems.

Oracle 11g

Oracle Thin Driver

Medium

Not thooughly testst. No support for rading of timestamps yet.

Contributing

Please submit bugs and patches. All contributors will be acknowledged. Thanks!

License

JayDeBeApi is released under the GNU Lesser General Public license (LGPL). See the file COPYING and COPYING.LESSER in the distribution for details.

Changelog

  • 0.1.3

    • Fixed DB-API violation: Use curs.execute('foo ?', (bar, baz)) instead of curs.execute('foo ?', bar, baz).

    • Free resources after executemany call.

    • Improved type handling. Initial support for BLOB columns.

  • 0.1.2

    • easy_install JayDeBeApi should really work.

  • 0.1.1

    • Fixed bug #688290 “NULL values with converters error on fetch”.

    • Fixed bug #684909 “Selecting ROWIDs errors out on fetch”.

  • 0.1

    • Initial release.

To do

  • Extract Java calls to seperate Java methods to increase performance.

  • Check if https://code.launchpad.net/dbapi-compliance can help making JayDeBeApi more DB-API complient.

  • Test it on different databases and provide a flexible db specific pluign mechanism.

  • SQLAlchemy modules (seperate project)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

JayDeBeApi-0.1.3.tar.gz (30.0 kB view details)

Uploaded Source

File details

Details for the file JayDeBeApi-0.1.3.tar.gz.

File metadata

  • Download URL: JayDeBeApi-0.1.3.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for JayDeBeApi-0.1.3.tar.gz
Algorithm Hash digest
SHA256 773b4ec6bb7b8ee49427168a09b607d2e90f552141b860ea1cacf0847ed7d731
MD5 f8c3d64b4851b7e1b2889926abe25860
BLAKE2b-256 57d38db0b0f813cccc50fad14c667b73d04788bbde5fe2c536b4aeed01f0a300

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page