将Python连接到H2

时间:2017-01-05 19:27:14

标签: python-2.7 h2 jaydebeapi

我正在尝试建立从python2.7到H2的连接(h2-1.4.193.jar - 最新)

H2(正在运行且可用):java -Dh2.bindAddress=127.0.0.1 -cp "E:\Dir\h2-1.4.193.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -tcpPort 15081 -baseDir E:\Dir\db

对于python,我正在使用jaydebeapi

import jaydebeapi

conn = jaydebeapi.connect('org.h2.Driver', ['jdbc:h2:tcp://localhost:15081/db/test', 'sa', ''], 'E:\Path\to\h2-1.4.193.jar')
curs = conn.cursor()
curs.execute('create table PERSON ("PERSON_ID" INTEGER not null, "NAME" VARCHAR not null, primary key ("PERSON_ID"))')
curs.execute("insert into PERSON values (1, 'John')")
curs.execute("select * from PERSON")
data = curs.fetchall()
print(data)

因此,每当我收到错误时都会:Process finished with exit code -1073741819 (0xC0000005) 你对这个案子有什么想法吗?或者我可以使用其他东西而不是jaydebeapi

2 个答案:

答案 0 :(得分:6)

回答我自己的问题: 首先,我无法通过jaydebeapi做任何事情。 我读过H2支持PostgreSQL网络协议。我接下来的步骤是将h2和python转换为pgsql:

H2 pg:

java -Dh2.bindAddress=127.0.0.1 -cp h2.jar;postgresql-9.4.1212.jre6.jar org.h2.tools.Server -baseDir E:\Dir\h2\db

TCP server running at tcp://localhost:9092 (only local connections)
PG server running at pg://localhost:5435 (only local connections)
Web Console server running at http://localhost:8082 (only local connections)
包含

postgresql.jar以尝试从Web控制台进行连接。

Python:psycopg2而不是jaydebeapi

import psycopg2

conn = psycopg2.connect("dbname=h2pg user=sa password='sa' host=localhost port=5435")
cur = conn.cursor()
cur.execute('create table PERSON ("PERSON_ID" INTEGER not null, "NAME" VARCHAR not null, primary key ("PERSON_ID"))')

结果 - 它现在正在工作。建立了连接并创建了表。

Web控制台设置:

Generic PostgreSQL
org.postgresql.Driver
jdbc:postgresql://localhost:5435/h2pg
name: sa, pass: sa

Web控制台确实已连接,但未向我显示表格列表,而是显示了许多错误:"CURRENT_SCHEMAS" is not found etc...。 PG管理员4也无法连接。救援的SQuirrel - 它已连接到这个数据库,并且一切正常。

答案 1 :(得分:1)

在1.5年后更新可能会有点晚,但是当前版本可以与H2很好地连接,而不必使用postgres驱动程序。

conn = jaydebeapi.connect("org.h2.Driver", "jdbc:h2:~/test", ["sa", ""], "/Users/angelo/websites/GEPR/h2/bin/h2-1.4.197.jar",)

来源:https://pypi.org/project/JayDeBeApi/#usage