SQLAlchemy поддерживает H2DB? - PullRequest
       3

SQLAlchemy поддерживает H2DB?

1 голос
/ 07 декабря 2011

Поддерживает ли SQLAlchemy H2 db? Я использую пирамиду и хотел бы подключиться к базе данных H2 db. При использовании postgres диалекта я получаю сообщение об ошибке, подобное следующему:

File "/Users/homecamera/gotocamera/hcadmin/env/lib/python2.7/site-packages/SQLAlchemy-0.7.3-py2.7-macosx-10.4-x86_64.egg/sqlalchemy/dialects/postgresql/base.py", line 871, in initialize
super(PGDialect, self).initialize(connection)
File "/Users/homecamera/gotocamera/hcadmin/env/lib/python2.7/site-packages/SQLAlchemy-0.7.3-py2.7-macosx-10.4-x86_64.egg/sqlalchemy/engine/default.py", line 181, in initialize
self.get_isolation_level(connection.connection)
File "/Users/homecamera/gotocamera/hcadmin/env/lib/python2.7/site-packages/SQLAlchemy-0.7.3-py2.7-macosx-10.4-x86_64.egg/sqlalchemy/dialects/postgresql/base.py", line 910, in get_isolation_level
cursor.execute('show transaction isolation level')
ProgrammingError: Syntax error in SQL statement "SELECT "; expected "TOP, LIMIT, DISTINCT, ALL, *, NOT, EXISTS"; SQL statement:
show transaction isolation level [42001-140]
DETAIL:  org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT "; expected "TOP, LIMIT, DISTINCT, ALL, *, NOT, EXISTS"; SQL statement:
show transaction isolation level [42001-140]

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

AFAIK Официальной поддержки диалектов HSQLDB или родного диалекта H2 нет.Использование диалекта Postgres с H2 (без использования HSQLDB) определенно приведет к ошибке, которую вы получаете.

Возможно, вам повезет, если вы попробуете sqlalchemy-jython и используете диалект H2.

1 голос
/ 17 ноября 2017

На всякий случай, если кто-то снова споткнется об этом, я попытался запустить его (в качестве альтернативы sqlite), и он работает только частично, и единственный работающий драйвер - это pg8000.

Когда сервер работает с использованием:

nohup java -cp /opt/h2/bin/h2*.jar org.h2.tools.Server -pg -pgAllowOthers -pgPort 5435 -baseDir /opt/h2-data &

Этот код работает в sqlalchemy:

from sqlalchemy import create_engine
engine = create_engine('postgresql+pg8000://sa:sa@localhost:5435/main')
engine.execute("SELECT 1")

Однако этот код вызывает исключение: из sqlalchemy_utils import create_database create_database ( '+ pg8000 PostgreSQL: // са: са @ локальный: 5435 / главный')

Исключение:

sqlalchemy.exc.ProgrammingError: (pg8000.core.ProgrammingError) ('ERROR', 
'HY000', 'General error: "java.lang.IllegalStateException: output binary 
format is undefined" [50000-196]', 'org.h2.jdbc.JdbcSQLException: General
error: "java.lang.IllegalStateException: output binary format is undefined"
[50000-196]') [SQL: 'select version()']
...