首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy在连接到GaussDB (对于openGauss)时引发未知版本的异常

SQLAlchemy在连接到GaussDB (对于openGauss)时引发未知版本的异常
EN

Stack Overflow用户
提问于 2022-01-05 06:23:21
回答 2查看 302关注 0票数 1

如下面的代码所示,我们可以选择一个ORM (对象-关系映射)模块来连接到GaussDB (用于openGauss)。我所知道的Python中最流行的第三方库是SQLAlchemy。但是,当我通过下面的代码连接到openGauss时,已知版本的异常会引发。

代码语言:javascript
复制
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import sessionmaker

# ...
dsn = '{}://{}:{}@{}:{}/{}'.format(db_type, username, password, host, port, database)
engine = create_engine(dsn, pool_pre_ping=True)
session_maker = sessionmaker(bind=engine)

# Base is a base class for each table.
# We want to create tables' schema, but the exception raises.
Base.metadata.create_all(
            engine,
            checkfirst=check_first
        )

我们提到的例外是:

代码语言:javascript
复制
  File "C:\Users\wotchin\AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\engine\create.py", line 674, in first_connect
    dialect.initialize(c)
  File "C:\Users\wotchin\AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\dialects\postgresql\psycopg2.py", line 775, in initialize
    super(PGDialect_psycopg2, self).initialize(connection)
  File "C:\Users\wotchin\AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\dialects\postgresql\base.py", line 3182, in initialize
    super(PGDialect, self).initialize(connection)
  File "C:\Users\wotchin\AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\engine\default.py", line 394, in initialize
    self.server_version_info = self._get_server_version_info(
  File "C:\Users\wotchin\AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\dialects\postgresql\base.py", line 3435, in _get_server_version_info
    raise AssertionError(
AssertionError: Could not determine version from string '(GaussDB Kernel V500R002C00 build 434c09d8) compiled at 2021-06-26 10:18:58 commit 0 last mr 1692 debug on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit'
EN

回答 2

Stack Overflow用户

发布于 2022-01-05 06:23:21

我解决了问题。

SQLAlchemy有一个版本检查。因此,我们可以在使用SQLAlchemy之前修改函数操作。

代码语言:javascript
复制
        from sqlalchemy.dialects.postgresql.base import PGDialect
        PGDialect._get_server_version_info = lambda *args: (9, 2)
票数 2
EN

Stack Overflow用户

发布于 2022-11-21 14:10:04

您现在可以尝试项目opengauss-sqlalchemy

openGauss最近提供了这个项目来支持SQLAlchemy。

重写PGDialect的内部方法PGDialect可以解决与openGauss的连接问题,但openGauss的一些SQL与PostgreSQL不同。此外,openGauss有比PostgreSQL更多的保留词,我们可能不会注意到,除非我们使用这些单词作为表或列名。

该项目已在皮皮吉蒂github上发表。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70588587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档