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:
- post:
- put:
- delete:
Car表的数据:
- get:
- post:
- put:
- delete:
12、登录GaussDB提供的管理平台查看是否创建数据库,以及创建的数据表数据是否符合预期,经检查符合预期
至此,经验收,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没有太过复杂的场景,担心当业务复杂度上去后,可能会出现资源浪费的情况。
验收材料
交付件清单
- (1) 博客的地址: https://bbs.huaweicloud.com/blogs/439578
- (2) Demo仓库地址:https://gitcode.com/michael_chen/PonyDjangoPythonDemo/overview
资源清单
产品名称 | 产品类型 | 数据库引擎版本 | 内核引擎版本 | 实例类型 | 部署形态 | 备注 |
---|---|---|---|---|---|---|
云数据库 GaussDB | 基础版 | V2.0-8.* | 505.2.* | 集中式 | 1主2备 | 推荐 |
产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 |
---|---|---|---|---|---|
弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |
- 点赞
- 收藏
- 关注作者
评论(0)