微信小程序-云开发 数据库http接口封装

最近学习一下微信小程序的云开发,作为serverless架构,着实省去很多麻烦,省的搞https证书了,也不用写api,但是总是要建后台系统的,云开发的数据库是nosql,为了用一下分页,我就封装了一下接口,如下

import requests
import json
from flask_sqlalchemy import Pagination

class WeChatCloudDB(object):
    """
    微信小程序云开发相关接口
    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/
    """
    def __init__(self, env, access_token):
        self.env = env
        self.access_token = "access_token=" + access_token
        self.query = ''
        self.url = ''
        self.method = ''

    def paginate(self, page=None, per_page=None, max_per_page=100):
        if page is None:
            page = 1

        if per_page is None:
            per_page = 20

        if max_per_page is not None:
            per_page = min(per_page, max_per_page)

        if page < 1:
            page = 1

        if per_page < 0:
            per_page = 20

        self.query += '.limit({0}).skip({1})'.format(per_page, (page-1)*per_page)
        items = self.commit()
        return Pagination(self, page, per_page, self.total, items)

    def commit(self):
        url = self.url + '?' + self.access_token
        data = {'env': self.env, 'query': self.query+'.get()' if self.method=='get' else self.query}
        response = requests.post(url, data=json.dumps(data))
        results = json.loads(response.text)
        if results and results.get('errcode')==0:
            pager = results.get('pager')
            if pager:
                self.total = pager.get('Total')
            if results.get('data'):
                return results.get('data')
            if results.get('modified'):
                return results.get('modified')
            if results.get('deleted'):
                return results.get('deleted')
            if results.get('count'):
                return results.get('count')
            if results.get('id_list'):
                return results.get('id_list')
            
        else:
            print(results.get('errcode'), results.get('errmsg'))
            return []
        
    def get(self, table, _id, **kwargs):
        self.method = 'get'
        self.url = 'https://api.weixin.qq.com/tcb/databasequery'
        self.query = 'db.collection("{}")'.format(table)
        if _id:
            self.query += '.doc("{}")'.format(_id)
        elif kwargs:
            filter_str = ''
            for k,v in kwargs.items():
                if isinstance(v, str):
                    filter_str += '{0}:"{1}"'.format(k, v)
                elif isinstance(v, bool):
                    filter_str += '{0}:{1}'.format(k, v and 'true' or 'false')
                else:
                    filter_str += '{0}:{1}'.format(k, v)

            self.query += '.where({%s})' % filter_str
        return self
   
    def update_one(self, table, _id, **kwargs):
        self.method = 'update'
        self.url = 'https://api.weixin.qq.com/tcb/databaseupdate'
        self.query = 'db.collection("{0}").doc("{1}")'.format(table, _id)
        if kwargs:
            filter_list = []
            for k,v in kwargs.items():
                if isinstance(v, str):
                    filter_list.append('{0}:"{1}"'.format(k, v))
                elif isinstance(v, bool):
                    filter_list.append('{0}:{1}'.format(k, v and 'true' or 'false'))
                else:
                    filter_list.append('{0}:{1}'.format(k, v))
            filter_str = ','.join(filter_list)
            self.query += '.update({data:{%s}})' % filter_str
        return self
    
    def delete_one(self, table, _id):
        self.method = 'delete'
        self.url = 'https://api.weixin.qq.com/tcb/databasedelete'
        self.query = 'db.collection("{0}").doc("{1}").remove()'.format(table, _id)
        return self

    def add_one(self, table, **kwargs):
        self.method = 'add'
        self.url = 'https://api.weixin.qq.com/tcb/databaseadd'
        self.query = 'db.collection("{}")'.format(table)
        if kwargs:
            filter_list = []
            for k,v in kwargs.items():
                if isinstance(v, str):
                    filter_list.append('{0}:"{1}"'.format(k, v))
                elif isinstance(v, bool):
                    filter_list.append('{0}:{1}'.format(k, v and 'true' or 'false'))
                else:
                    filter_list.append('{0}:{1}'.format(k, v))
            filter_str = ','.join(filter_list)
            self.query += '.add({data:[{%s}]})' % filter_str
        return self 
    
    def count(self, table, **kwargs):
        self.method = 'count'
        self.url = 'https://api.weixin.qq.com/tcb/databasecount'
        self.query = 'db.collection("{}")'.format(table)
        if kwargs:
            filter_str = ''
            for k,v in kwargs.items():
                if isinstance(v, str):
                    filter_str += '{0}:"{1}"'.format(k, v)
                elif isinstance(v, bool):
                    filter_str += '{0}:{1}'.format(k, v and 'true' or 'false')
                else:
                    filter_str += '{0}:{1}'.format(k, v)

            self.query += '.where({%s})' % filter_str
        self.query += '.count()' 
        return self

link:https://github.com/xiaoyeqiannian/alita/blob/master/util/wx_api.py

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序可以通过调用后端 API 来链接 MySql 数据库。在小程序端使用 wx.request 或 wx.cloud.callFunction 等 API 发起请求,在后端使用 Node.js 和一个数据库连接库(如mysql2)来操作数据库。 ### 回答2: 微信小程序与MySQL数据库的连接主要是通过后端服务器进行实现。 首先,我们需要搭建一个后端服务器,可以选择Node.js、Java、PHP等后端技术来实现。在服务器上搭建好MySQL数据库,并创建相应的数据表。 然后,在小程序中通过调用后端服务器的接口来实现与MySQL数据库的交互。具体步骤如下: 1. 首先,在小程序中编写前端页面和逻辑代码,获取用户输入的数据或操作,并将数据发送给后端服务器。 2. 小程序使用wx.request()函数向后端服务器发送HTTP请求,请求后端服务器提供的接口。 3. 后端服务器接收到请求后,解析请求数据,并对数据进行验证和处理。 4. 后端服务器使用数据库连接库,例如Java中的JDBC、Node.js中的mysql模块等,与MySQL数据库建立连接。 5. 建立连接后,后端服务器将接收到的数据存储到MySQL数据库中,可以使用SQL语句将数据插入到相应的表中。 6. 后端服务器将处理结果返回给小程序,将查询结果或插入结果等数据封装成JSON格式后返回给小程序。 7. 小程序接收到后端服务器返回的数据后,根据需求进行展示或执行相应的操作。 需要注意的是,为了保证数据传输的安全性,需要在后端服务器中进行参数的验证和过滤,以防止SQL注入等安全问题的发生。此外,还需要注意数据库的设计和优化,合理使用索引、表关联等技术来提升数据查询和插入的性能。 综上所述,通过搭建后端服务器,可以实现微信小程序与MySQL数据库的连接,实现数据的存储和交互。 ### 回答3: 微信小程序是一种基于微信平台的应用程序,而MySQL是一种广泛使用的关系型数据库管理系统。如何将微信小程序连接到MySQL数据库,可以按照以下步骤进行操作。 首先,在小程序开发工具中创建一个新的小程序项目,并通过AppID进行关联。 接下来,需要在小程序的后台服务器上创建一个接口,用于与MySQL数据库进行交互。可以使用一些框架,例如Node.js或PHP来搭建服务器。这个接口的作用是提供数据的读写操作,将小程序中的请求转发到MySQL数据库。 然后,需要在服务器端安装MySQL驱动以及相应的依赖包。根据具体的编程语言和框架,安装方法可能有所不同。通常,可以使用npm或composer等包管理工具进行安装。 接下来,需要在服务器端建立与MySQL数据库的连接。在服务器端的代码中,使用数据库驱动连接到MySQL数据库,并且提供相关的数据库连接配置,例如主机地址、用户名、密码和数据库名称。 然后,在小程序的前端代码中发送请求,并通过接口将数据传递到服务器端。可以使用小程序的内置API,如wx.request方法,向服务器发送HTTP请求。 最后,在服务器端的接口中,接收到小程序发送的请求后,进行相应的数据读写操作。通过执行数据库操作语句,如查询、插入、更新或删除等,与MySQL数据库进行交互,并将结果返回给小程序。 需要注意的是,在连接MySQL数据库时,要确保数据库的安全性。可以使用凭证或者对接口进行权限验证,以防止恶意操作和数据泄露。 综上所述,通过在小程序中创建接口,搭建服务器,连接MySQL数据库,并进行相关的数据读写操作,可以实现微信小程序与MySQL数据库的连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值