Python SQLAlchemy支持H2DB吗?

Python SQLAlchemy支持H2DB吗?,python,sqlalchemy,h2,Python,Sqlalchemy,H2,SQLAlchemy支持H2 db吗?我正在使用pyramid,希望连接到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 init

SQLAlchemy支持H2 db吗?我正在使用pyramid,希望连接到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]

AFAIK没有官方支持HSQLDB方言或本地H2方言。 在H2中使用Postgres方言(不使用HSQLDB)肯定会导致错误


您在尝试和使用H2方言时可能会有更好的运气。

AFAIK没有官方支持HSQLDB方言或本地H2方言。 在H2中使用Postgres方言(不使用HSQLDB)肯定会导致错误


如果您尝试并使用H2方言,您可能会有更好的运气。

为了防止有人再次遇到这个问题,我尝试运行它(作为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\u utils导入创建\u数据库 创建_数据库('postgresql+pg8000://sa:sa@localhost:5435/main')

例外情况:

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()']

为了防止有人再次遇到这个问题,我试着让它运行(作为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\u utils导入创建\u数据库 创建_数据库('postgresql+pg8000://sa:sa@localhost:5435/main')

例外情况:

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()']

谢谢你的信息。我目前正在使用psycopg通过直接SQL连接H2。@carbotex,请您澄清一下您是如何做到这一点的?我正在努力让psycopg连接到内存中的数据库。我无法让它通过身份验证步骤。谢谢你提供的任何线索。我目前正在使用psycopg通过直接SQL连接H2。@carbotex,请您澄清一下您是如何做到这一点的?我正在努力让psycopg连接到内存中的数据库。我无法让它通过身份验证步骤。任何线索都将不胜感激。