微信小程序云托管MySQL搭建

对应往期:微信小程序云托管数据传输
调试参考:Python restful API入门及本地调试

接着上次的云托管搭建,我们这次用MySQL替换原本的csv读取机制,因为用户是通过实例访问服务的,如果用户较多,需要多个实例才能保证服务的通畅,而实例的本质就是建立一个个独立的工程,也就是说csv文件也将通过这种方法被复制成独立的多份,数据就不同步了,所以还是需要MySQL搭建的数据库存储数据,才能使得数据被同步,服务的源码工程也能和数据相互独立,方便升级维护。

云托管MySQL搭建

微信云托管MySQL界面

  • 如上,点击微信云托管的MySQL界面,创建MySQL(我已经创建,过程很简单不展示)后会显示如图的界面,在账号管理部分会有一个root账号,可以自行添加账号,每个账号存储可以各自的数据表格。root账号不可编辑,其他账号可以编辑权限、名称、备注等信息。
  • 下方的网络信息部分可以看到内外网地址,需要API通过这个地址进行数据访问,外网地址最初是关闭的,可以打开它,在本地调试过程中,我们可以通过这个地址访问,而微信小程序等线上服务访问通过内网地址即可。
    腾讯云数据库登录
  • 点击数据库管理,和云服务一样,数据库长时间没有运行访问需要一定时间启动,时间会比前者短。进入登录界面如上图,你的实例名称自动填写了,只需要输入你需要访问的MySQL账号及密码即可。
    数据库主界面
  • 进入后界面如上,点上面的新建建立新的库,我取名userinform,然后点击加号创建表格,基本信息没有硬性要求,至少填入名字即可,这里取名user。列信息即你的数据结构,需要设置变量名(列名)、对应的数据类型、备注信息等,如下。
    列信息
  • 如下图,接下来编辑表格数据,可以一条条新增数据并为每一列赋值。支持导出csv等格式、复制等操作。编辑完成最后提交。
    表格编辑
    快捷操作举例
  • 右边提供了MySQL操作语言的快捷生成,能够通过简单的操作实现字段显示、筛选、排序等操作,并在下方生成对应的代码方便复制。如上图,我查询invitecode字段是CAO的数据,点击确定后自动为我筛出了对应数据。
  • 至此我们搭建完成云端的数据库。

Python的restful工程

linedetect:
——Dockerfile
——app:
————-main.py

  • 如上,沿用上次的工程,可以删除csv文件,将main文件的代码进行更改,就是将原本的围绕csv的读写操作改成对于MySQL的一系列操作。这里我们需要按安装MySQL的库,线上的工程不会自带这种库的,更改dockerfile文件内容如下:
FROM tiangolo/uwsgi-nginx-flask:python3.8
RUN pip install mysql-connector-python
COPY ./app /app
  • 接下来是主要数据库操作的代码,操作函数的共有流程是访问数据库、获取需要的数据、数据处理操作、断开连接,我们可以将共有的访问数据库和断开连接做成装饰器,操作函数前添加装饰器即可,避免重复编写。装饰器如下,hostport在内、外网地址有,本地调试就用外网的,user需要填写数据库的账号名,password就是密码,database是要访问的库,这些信息即可访问到数据库了if connection.is_connected()分支即连接成功后的操作,即我们的获取对应数据、数据处理的函数。
import os
from flask import Flask, jsonify, request, make_response
import mysql.connector

# 创建数据库连接,装饰器
def database_connection(func):
    def wrapper(*args, **kwargs):
        try:
            connection = mysql.connector.connect(
                host="11.11.111.111",
                port=0000,
                user="linedetect",
                password="xxx",
                database="userinform"
            )

            if connection.is_connected():
                print("成功连接到数据库")
                func(connection, *args, **kwargs)

        except mysql.connector.Error as err:
            print(f"数据库连接错误:{err}")

        finally:
            if 'connection' in locals() and connection.is_connected():
                connection.close()
                print("数据库连接已关闭")
    return wrapper
  • 接下来就举例之前的激活授权码操作,即将根据invitecode(授权码)查询对应数据并将其activation(激活状态)更新为1,首先调用装饰器,相当于完成了连接和断开数据库的部分,函数内只需要写查询或者更新字段,这里我们更改了字段,所以用UPDATE指令:"UPDATE user SET activation = %s WHERE invitecode = %s",user是访问的表名(装饰器已经访问到具体的数据库了),activation是需要操作的变量,WHERE后面是操作的条件,即invitecode符合要求即可。
@database_connection
def activateCode(connection, invitecode):          # 激活某个授权码
    # 创建游标对象
    cursor = connection.cursor()
    # 更新数据
    update_query = "UPDATE user SET activation = %s WHERE invitecode = %s"
    new_activation_value = 1
    target_invite_code = invitecode
    # 执行指令
    cursor.execute(update_query, (new_activation_value, target_invite_code))
    connection.commit()

    print(f"已成功激活 invitecode 为 {target_invite_code} 的行")
  • 接着是restful的函数,实现云服务,和之前的没有变化
@app.route('/activate',methods=['POST'])
# 激活授权码
def activate():
    args = request.json
    try:
        goal = args["invitecode"]       # 要激活的授权码
        activateCode(goal)              # 将该授权码激活状态置为1
        return jsonify({"passed": True, "message": "成功", "data": None})
    except:
        return jsonify({"passed": False, "message": "错误", "data": None})
  • 调试可以使用ApiPost进行本地调试,不再赘述,可以通过参考链接查看。最后将数据上传git通过流水线更新服务。

结果

  • 之前的微信小程序也能实现结果,这次我们用上次没提到的云服务的调试。
    云服务调试
  • 调试界面如上,返回成功,查看MySQL得到如下图结果,77kk对应的激活状态变成1,成功实现。
    调试结果
  • Copyrights © 2023-2025 LegendLeo Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信