首页 > 数据库 >【AGC】云数据库云侧Python SDK集成使用方法

【AGC】云数据库云侧Python SDK集成使用方法

时间:2023-06-27 12:02:01浏览次数:43  
标签:obj zone Python AGC db 云侧 query logger cloud

使用场景

云数据库服务端以前支持Node.JS和Java平台的Server SDK。现在介绍一下服务端为Python平台时的使用方法。

集成准备

Python环境配置

1.下载Python和PyCharm并安装。

【AGC】云数据库云侧Python SDK集成使用方法_Python

【AGC】云数据库云侧Python SDK集成使用方法_数据_02

2.使用安装的python本身作为解释器。

【AGC】云数据库云侧Python SDK集成使用方法_Python_03

3.安装AGC Python SDK。

【AGC】云数据库云侧Python SDK集成使用方法_Python_04

AGC环境配置

1.在AGC创建项目和应用

【AGC】云数据库云侧Python SDK集成使用方法_云数据库_05

2.开通云数据库服务。

【AGC】云数据库云侧Python SDK集成使用方法_数据_06

3.选择:我的项目-> 构建 – 云数据库,创建对象类型和存储区,对象类型各字段如下图,存储区名为“QuickStartDemo”。

【AGC】云数据库云侧Python SDK集成使用方法_Python_07

【AGC】云数据库云侧Python SDK集成使用方法_Python_08

4.返回项目设置界面,选择Server SDK 页签,在认证凭据处点击创建按钮,然后下载认证凭据。

【AGC】云数据库云侧Python SDK集成使用方法_Python_09

5.在我的项目-云数据库中导出对象类型的JS件,导入项目目录中

功能实现

引入AGC与云数据库模块

from agconnect.common_server import AGCClient

from agconnect.common_server import CredentialParser

from agconnect.database_server import AGConnectCloudDBException

from agconnect.database_server import CloudDBZoneConfig

from agconnect.database_server import CloudDBZoneQuery

from agconnect.database_server import AGConnectCloudDB

from agconnect.database_server import TransactionFunction, Transaction

from agconnect.common_server import logger

【AGC】云数据库云侧Python SDK集成使用方法_Python_10

将下载的凭据文件放入项目中,调用AGCClient.initialize方法初始化AGCClient实例

将配置开发环境中获取的认证凭据放置到自定义的目录,通过initialize方法初始化对应数据处理位置的AGCClient实例,调用get_instance取初始化后的AGCClient实例,然后开启存储区“QuickStartDemo”。

bj_wrapper = CloudDbZoneWrapper("clientCN", "CN")

zone_name = "QuickStartDemo"

credential_path = CredentialParser.to_credential("./agc-apiclient-1071113651286461824-7189597874176627946.json")

AGCClient.initialize(self.client_name, credential_path, self.region)

agc_client = AGCClient.get_instance(self.client_name)

logger.info(f"name {agc_client.get_name()}")

AGConnectCloudDB.initialize(agc_client)

cloud_db_zone_config = CloudDBZoneConfig(zone_name)

self.cloud_db_zone = AGConnectCloudDB.get_instance(agc_client).open_cloud_db_zone(cloud_db_zone_config)

【AGC】云数据库云侧Python SDK集成使用方法_Python_11

写入数据

使用execute_upsert()将BookInfo对象写入至Cloud DB zone中,写入成功后,返回写入的数量;写入失败,捕获异常信息。

async def upsert_book(self, book_info):

        if not self.cloud_db_zone:

            logger.info("CloudDBClient is null, try re-initialize it")

            return

        try:

            resp = await self.cloud_db_zone.execute_upsert(book_info)

            print(resp)

            logger.info(f'The number of upsert books is: {resp}')

        except Exception as err:

            logger.warning(f'upsertInfoBook=> {err}')

【AGC】云数据库云侧Python SDK集成使用方法_Python_12

调用execute_query()查询数据

查询所有数据

async def query_all_books(self):

        if not self.cloud_db_zone:

            logger.info("CloudDBClient is null, try re-initialize it")

            return

        try:

            cloud_db_zone_query = CloudDBZoneQuery.where(BookInfo)

            resp = await self.cloud_db_zone.execute_query(cloud_db_zone_query)

            len(resp.get_snapshot_objects())

            logger.info(f'The number of query table is: {len(resp.get_snapshot_objects())}')

        except Exception as err:

            logger.warning(f'queryAllInfo=> {err}')

【AGC】云数据库云侧Python SDK集成使用方法_数据_13

查询bookName为the Red And Black的图书

async def query_books_start_at(self):

        obj = BookInfo()

        obj.set_id(5)

        obj.set_book_name("The Red And Black")

        obj.set_price(10.99)

        try:

            cloud_db_zone_query = CloudDBZoneQuery.where(BookInfo).order_by_asc("bookName"). \

                order_by_asc("price").start_at(obj)

            resp = await self.cloud_db_zone.execute_query(cloud_db_zone_query)

            print(len(resp.get_snapshot_objects()))

            logger.info(f'The number of query table is: {len(resp.get_snapshot_objects())}')

 

        except Exception as err:

            logger.warning(f'queryAllInfo=> {err}')

【AGC】云数据库云侧Python SDK集成使用方法_数据_14

调用execute_delete()删除数据

删除对应bookinfo对象的数据

async def delete_book(self, book_info):

        if not self.cloud_db_zone:

            logger.info("CloudDBClient is null, try re-initialize it")

            return

        try:

            resp = await self.cloud_db_zone.execute_delete(book_info)

            logger.info(f'The number of delete books is: {resp}')

        except Exception as err:

            logger.warning(f'deleteInfoBook=> {err}')

【AGC】云数据库云侧Python SDK集成使用方法_Python_15

删除所有数据

async def delete_all_books(self, book_info):

        if not self.cloud_db_zone:

            logger.info("CloudDBClient is null, try re-initialize it")

            return

        try:

            resp = await self.cloud_db_zone.execute_delete_all(book_info)

            logger.info(f'The number of delete all books is: {resp}')

        except Exception as err:

            logger.warning(f'deleteAllInfoBook=> {err}')

【AGC】云数据库云侧Python SDK集成使用方法_云数据库_16

调用run_transaction()执行事务,实现对云侧存储区数据的管理操作,包含数据的增、删、改、查操作。

使用以下方法,通过事务删除1900年之前发布的书。

async def delete_over_due_books(self, cloud_db_zone_query):

        try:

            transaction_function_obj = TransactionFunction()

            async def apply(transaction: Transaction):

                try:

                    data = await transaction.execute_query(cloud_db_zone_query)

                    logger.info(f'query entityone num: {str(len(data))}')

                except AGConnectCloudDBException as error:

                    logger.error(error)

                    return False

                return True

            transaction_function_obj.apply = apply

            res = await self.cloud_db_zone.run_transaction(transaction_function=transaction_function_obj)

            print(res)

            logger.info(f"the transaction result: {res}")

        except AGConnectCloudDBException as err:

            logger.error(err.get_error_message())

【AGC】云数据库云侧Python SDK集成使用方法_数据_17

main.py中执行的方法

new_loop = asyncio.new_event_loop()

    asyncio.set_event_loop(new_loop)

    loop = asyncio.get_event_loop()

 

    loop.run_until_complete(obj_wrapper.delete_all_books(BookInfo))

    loop.run_until_complete(obj_wrapper.upsert_book(book))

    loop.run_until_complete(obj_wrapper.upsert_book(book_info_list))

    loop.run_until_complete(obj_wrapper.query_all_books())

 

    try:

        cloud_db_zone_query = CloudDBZoneQuery.where(BookInfo).less_than(

            "price", 50)

        res = loop.run_until_complete(obj_wrapper.query_books(cloud_db_zone_query))

        print(res)

    except Exception as err:

        logger.warning(err)

 

    loop.run_until_complete(obj_wrapper.query_books_with_order())

    loop.run_until_complete(obj_wrapper.query_books_start_at())

    loop.run_until_complete(obj_wrapper.query_average())

 

    try:

        date_obj = datetime.datetime.now()

        cloud_db_zone_query = CloudDBZoneQuery.where(BookInfo).greater_than_equal_to("publishTime", date_obj)

        loop.run_until_complete(obj_wrapper.delete_over_due_books(cloud_db_zone_query))

    except Exception as err:

        logger.warning(err)

 

    loop.run_until_complete(obj_wrapper.delete_book(book))

    loop.run_until_complete(obj_wrapper.delete_book(book_info_list))

【AGC】云数据库云侧Python SDK集成使用方法_Python_18

功能测试

执行python main.py命令,服务依次执行:

删除所有数据:

【AGC】云数据库云侧Python SDK集成使用方法_Python_19

插入一个bookinfo对象的数据:

【AGC】云数据库云侧Python SDK集成使用方法_云数据库_20

插入bookinfo列表中的多条数据:

【AGC】云数据库云侧Python SDK集成使用方法_云数据库_21

查询所有的书,打印出数量:

f'The number of query table is:5

查询价格低于50的书的数量:

f'The number of query table is:3

删除一个bookinfo对象的数据:

【AGC】云数据库云侧Python SDK集成使用方法_数据_22

删除列表中所有数据:

【AGC】云数据库云侧Python SDK集成使用方法_数据_23

以上就是服务端集成云数据Python SDK的使用方法,开发指导文档也会在日后上线。



标签:obj,zone,Python,AGC,db,云侧,query,logger,cloud
From: https://blog.51cto.com/u_15687416/6562049

相关文章

  • python-docx - 3
    1.添加图片函数:add_picture(图片文件,width=宽,height=高)如果只指定一个宽或高,则按比例缩放。1.1文档直接添加图片fromdocximportDocumentfromdocx.sharedimportCmdoc=Document()doc.add_picture("images/2.jpg",width=Cm(8))doc.save("1.docx")1.2段落......
  • python批量安装第三方库
    把需要安装的库名和版本号(版本号可写)写入txt文件: 终端输入pip安装命令,等待安装完成即可:pipinstall-rrequirements.txt-i......
  • ubuntu搭建python3.10.7(服务器第一步)
    一安装python更新Ubuntu软件源和依赖(建议操作)1-sudoaptupdate2-sudoaptinstallbuild-essentialzlib1g-devlibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-dev3-下载安装包:wgethttps://www.python.org/ftp/python/3.10.7/Python-3.10.7......
  • python 批量删除 redis 大量数据
    #!/usr/bin/envpython#ScananddeletekeysinRedis.#Author:cdfivefromredisimportRedisimporttimedefRedisScanAndDelete(host,port,password,db,cursor,pattern,count,batch_delete_size):start_time=time.time()client=Redis(host......
  • python:一行代码读写文件
    1、读取文件lst=[line.strip()forlineinopen('data.txt')]print(lst)这里我们使用列表来处理。首先,我们打开一个文本文件,并使用for循环,逐行读取。最后,使用strip删除所有不必要的空间。通过使用列表功能,使得代码更简单,更短。list(open('data.txt'))##Usingwithwi......
  • Python -Flask HTML <img 显示本地图片失败,怎么破?
    大家好,我是皮皮。一、前言前几天在Python白银群【膨】问了一个Flask图片显示的问题,这里拿出来给大家分享下。运行之后图片加载不出来。二、实现过程这里【此类生物】给了一个思路,flask运行当前路径是主程序路径,把图片路径改成绝对路径。结果页面还是加载不出来。后来以......
  • 如何利用python做爬虫?
    Python爬虫在许多情况下是非常有用的,爬虫可以帮助自动化地从互联网上获取大量数据。这些数据可以是产品信息、新闻文章、社交媒体内容、股票数据等通过爬虫可以减少人工收集和整理数据的工作量,提高效率。在软件开发中,可以使用爬虫来进行自动化的功能测试、性能测试或页面链接检查......
  • python全栈开发查询目录
     python全栈开发查询目录(私有状态具体内容暂不支持访问)  第一模块:Python基础&基础数据类型第1章:计算机基础和环境搭建-cnblog第2章:快速上手-cnblog第3章:python基础-cnblog第4章:进制和编码-cnblog第5章:数据类型之int、bool、str-cnblog第6章:数据类型之list、tuple-c......
  • python源码结构
    在Python中,源文件通常以.py为扩展名,并且可以按照一定的结构进行组织。下面是一个典型的Python源文件的结构示例:1#-*-coding:utf-8-*-23"""模块的文档字符串"""45#导入语句6importmodule17frommodule2importfunc1,func28frommodule3import*......
  • Python数据预处理
    1数据的生成与导入这里主要使用的pandasimportpandasaspd#加载excel数据df_excel=pd.read_excel('')df_excel.head()#加载text数据df_text=pd.read_table('')df_text.head()#加载csv数据df_csv=pd.read_csv('')df_csv.head()2读取多个数据并合并importglobg......