python orm框架操作oceanbase mysql的问题咨询和示例

【产品名称】python sqlalchemy orm包

【产品版本】ob 3.1.2

【问题描述】原先写入mysql的python程序在迁移到ob的过程中,发现报错,初步判断原因在于orm在操作mysql的时候会执行select version来判断mysql的版本,而ob中该命令的结果是ob的版本。出现兼容性问题。

1.python orm连接方法

2.python执行create报错

3.sqlalchemy 报错位置,可见有判断数据库版本

4.ob和mysql执行select version的版本差异

请加上以下这段代码在试试


from sqlalchemy.dialects.mysql.base import MySQLDialect
def _get_server_version_info(self, connection):
    # get database server version info explicitly over the wire
    # to avoid proxy servers like MaxScale getting in the
    # way with their own values, see #4205
    dbapi_con = connection.connection
    cursor = dbapi_con.cursor()
    cursor.execute("show global variables like 'version_comment'")
    val = cursor.fetchone()
    if val:
        if 'OceanBase' in val[1]:
            val = '5.6.0'
    else:
        cursor.execute("SELECT VERSION()")
        val = cursor.fetchone()[0]
    cursor.close()
    from sqlalchemy import util
    if util.py3k and isinstance(val, bytes):
        val = val.decode()


    return self._parse_server_version(val)



setattr(MySQLDialect, '_get_server_version_info', _get_server_version_info)







这个方法可以解决,多谢