pony适配GaussDB开源验证任务心得

举报
西装暴徒_Michael 发表于 2024/11/15 11:37:36 2024/11/15
【摘要】 这个任务的主要工作是完成 pony 连接 GaussDB 的验证工作。

第一步先看下任务计划书 https://bbs.huaweicloud.com/blogs/437793 ,这个任务的主要工作是完成 pony 连接 GaussDB 的验证工作。主要是需要花时间熟悉pony的底层代码逻辑和基本使用方法,下面介绍下适配过程中的一些关键步骤。

开发过程

pony适配过程

1、为了避免开发环境混乱无序,建议使用虚拟环境开发:python -m venv yourVenvName

2、fork代码 https://github.com/ponyorm/pony 到个人仓库,然后再进入虚拟环境,clone代码。

3、安装pony适配GaussDB所需的驱动,使用GaussDB官网提供的驱动

4、使用setup.py来注册pony到python的site-packages包里

python setup.py develop 

注意此命令在pony的根目录执行,即setup.py的同级目录

5、购买GaussDB数据库

6、编写pony脚本(根据官网的Demo,https://docs.ponyorm.org/firststeps.html#creating-the-database-object

7、安装Django所需的依赖库

pip install django==3.2.25

8、设置Django下的settings.py里的database的配置

PONY_DATABASES = {
    'NAME': 'XXX',    # 数据库名称
    'USER': 'XXX',    # 数据库用户
    'PASSWORD': 'XXX',  # 用户密码
    'HOST': 'XXX',   # GaussDB 主机
    'PORT': 'XXX',        # GaussDB 端口
}

9、根据官网的Demo开发好urls.py、views.py、models.py的代码(详见,请移步:https://gitcode.com/michael_chen/PonyDjangoPythonDemo/overview),就可以启动服务了

10、启动服务,python manage.py runserver 0.0.0.0:yourPort

11、验证数据,经过测试,可以通过API对GaussDB的数据CRUD操作。

Person表的数据:

  • get:

pony-person-get.png

  • post:

pony-person-post.png

  • put:

pony-person-put.png

  • delete:

pony-person-delete.png

Car表的数据:

  • get:

pony-car-get.png

  • post:

pony-car-post.png

  • put:

pony-car-put.png

  • delete:

pony-car-delete.png

12、登录GaussDB提供的管理平台查看是否创建数据库,以及创建的数据表数据是否符合预期,经检查符合预期

pony-GaussDB.png

至此,经验收,pony所生成的数据符合预期,pony适配GaussDB,使用GaussDB提供的psycopg2驱动,可以完成基本使用,后续有因方言等问题,持续更新。

开发总结

适配中遇到的问题点:

  • 报错:Illegal instruction (core dumped)
    • 问题描述:使用GaussDB官方提供的驱动包,在ECS上选择的是 Euler2.9_arm_64 目录下的psycopg2包,根据文档安装psycopg2包后,使用`python3 -c 'import psycopg2; print(psycopg2.__version__)'`可以正常显示版本信息,但是,在使用脚本连接GaussDB时,就报错:Illegal instruction (core dumped)。
    • 分析:根据报错信息查询,网上更多的是说驱动包与系统不兼容的问题,可能需要驱动包发布方验证,提供支持或者安装psycopg2包与ECS系统不对应。
    • 解决方案:
      • 使用pip提供的psycopg2包,可以连接GaussDB,提供驱动服务。这个方案虽然可以正常使用,但是需要修改GaussDB的password_encryption_type为1,有降低password安全性的风险。因此,不建议这样适配。
      • 因我的ECS是HuaweiCloudEulerOS 5.10.0-182.0.0.95.r1941_123.hce2.aarch64系统,在GaussDB提供的驱动包中,要使用 Hce2_arm_64 目录下psycopg2包,经测试不用修改GaussDB的password_encryption_type就可以直接使用GaussDB,满足需求。(确认之前是因为选错目录导致)
  • 报错:DISCARD statement is not yet supported
    • 原因:因为我们使用的是postgresDB的方式,pony中会对其执行`cursor.execute('DISCARD ALL')`——清理会话中的临时资源。这个命令对于GaussDB而言,并不支持。所以,会报错。
    • 解决方案:当pony使用GaussDB时,注释掉 pony/orm/dbproviders/postgres.py 的183行代码`cursor.execute('DISCARD ALL')`。
    • 风险:经测可以正常使用GaussDB,因测试demo没有太过复杂的场景,担心当业务复杂度上去后,可能会出现资源浪费的情况。

验收材料

交付件清单


资源清单

产品名称 产品类型 数据库引擎版本 内核引擎版本 实例类型 部署形态 备注
云数据库 GaussDB 基础版 V2.0-8.* 505.2.* 集中式 1主2备 推荐


产品名称 CPU架构 实例类型 公共镜像 镜像版本 备注
弹性云服务器 鲲鹏计算 鲲鹏通用计算增强型 Huawei Cloud EulerOS Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) 推荐


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。