小程序云开发数据库API - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

小程序云开发数据库API

发表时间:2020-10-27

发布人:葵宇科技

浏览次数:52

小程序云开发HTTP API使用

本人使用Python3.X作为开发版本,其他语言类似,格式自己调一下(requests.post发请求)
主要用于,作为与小程序关联的数据提供平台,使用脚本或者开发WEB端平台为小程序提供数据、或作为小程序的数据的管理端(CRUD)

在完成小程序认证、小程序项目创建后(要勾选云开发),可以在小程序控制台(开发-开发设置)获取你的AppID(小程序ID)以及AppSecret(小程序密钥)并在成员管理中为添加开发者权限

在这里插入图片描述小程序秘钥只能查看一次,再次查看会重置(切记保存)

以下为API调用:

云开发有各种调用限制,免费环境为5万次读请求,3万次写请求,access_token获取有次数限制(具体在文档里找一下),任一次数超过调用上限即会被停服到隔天凌晨1点左右,小程序控制台有每月10次清空调用次数
首先获取小程序access_token(有效时间120min,且再次获取,上次的会失效)

GRANT_TYPE = 'client_credential'
APP_ID = '你的AppID'
APP_SECRET = '你的AppSecret'
        
url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret{2}'.format(GRANT_TYPE,APP_ID,APP_SECRET)
response = requests.get(url)
result = response.json()
# 如果频繁使用的话可以把token写到一个txt文件中,但小程序没有提供token是否有效的接口
print(result['access_token'])

新增集合(数据表)

url = 'https://api.weixin.qq.com/tcb/databasecollectionadd?access_token={0}'.format(access_token)
data = {
	'env':'环境名',
	'collection_name': '集合名称'
}
requests.post(url, data=json.dumps(data))

新增完集合后,CRUD基本差不太多

# url有些区别(第一个是count集合有多少数据)
url = 'https://api.weixin.qq.com/tcb/databasecount?access_token={}'.format(access_token)
url = 'https://api.weixin.qq.com/tcb/databaseadd?access_token={}'.format(access_token)
url = 'https://api.weixin.qq.com/tcb/databasedelete?access_token={}'.format(access_token)
url = 'https://api.weixin.qq.com/tcb/databaseupdate?access_token={}'.format(access_token)
url = 'https://api.weixin.qq.com/tcb/databasequery?access_token={}'.format(access_token)
# 小程序的sql语句
"""
	小程序常用数据类型string、number(包括整型和浮点型)、array(数组)对应python字符串格式化
	'%s'、%d、%s,字符串要用引号包起来,数字不能用引号,str(list)传入
	query = "db.collection('集合名称').where({字段名:'条件'})
	.add({data:{[键:'值']}})/remove()/update({data:{键:'值'}})/get()"
"""
# get还可以加“.limit().skip()”加载get()之前,limit服务端默认为10,最大为1000
# 组织数据包
data = {
	"env": "你的环境名称在开发工具内找到",
	"query": query
}
# 字符串格式化后一定要转成json字符串
response = requests.post(url, data=json.dumps(data))
print(response.json())

基本的增删改查如果不能满足你的需求,那你可以试一下极其难用的聚合操作

# 除url和query语句不同外,基本相同,写db_handle类时可以提高复用性
url = 'https://api.weixin.qq.com/tcb/databaseaggregate?access_token={}'.format(access_token)

# 下面是我在开发是用过的一个简单的聚合(自己调一下缩进)
query = "db.collection('Book_information').aggregate()
.match({'is_delete':0}).sort({create_time:-1})
.lookup({
	from:'user_books',
	localField:'book_name',
	foreignField:'book_name',
	as:'book_info'})
.skip(%d).limit(10).end()" % (page * 10)
"""
	.aggregate():发起聚合操作
	.match():等于普通语句的.where()
	排序可以多字段排序
		聚合阶段: .sort({'字段名':-1,'多字段'}):根据某一字段排序,-1降序
		普通查询: .orderBy('字段名','asc').orderBy(多字段写多个)
	.group({
		_id:$表内字段名,
		num:$.sum(1),
		支持多字段,但多字段都为累加值,需要使用算数运算符
	})
	选择输出字段:
		聚合阶段: .project({多字段,_id默认保留})
		普通查询: .field({多字段,选择要输出的字段名})
	.lookup():连表查询,上方演示为二种中的一种
		from:'连接的表名',
		localField:'主表要连接的字段',
		foreignField:'连接表的字段两者相等即连接',
		as:'book_info'(连接后,key为book_info,value为列表)
	.end():聚合阶段结束
"""
还有一个细节问题,普通查询中,算数运算符和逻辑运算符要用“_.or”,而聚合操作中要使用“$.or”使用
常用逻辑运算符_.and/_.or
	单字段
		_.and({_.gt(50),_.(100)}) 或者 _.gt(50).and(_.lt(100))
	多字段
		_.and([{ progress: _.gt(50)},{tags: 'cloud'}])
		where或match中多条件默认带and
比较运算符
		聚合阶段时包括当前集合的字段名也要使用“$.”
		gt		大于 			llt		小于 			eq		等于
		gte		大于等于			lte		小于等于			neq		不等于
		还有普通查询特有
			in,nin,可直接传入一个数组
# 最后还有一个上传文件到存储
path = '文件路径'
url = "https://api.weixin.qq.com/tcb/uploadfile?access_token={}".format(access_token)
data = {
    "env": "环境名称",
    "path": "文件路径(需要带文件后缀名)" 
}
response = requests.post(url, data=json.dumps(data))
result = response.json()
file = {"file": open(path, "rb")}
# 两个data中的文件路径为小程序云存储中的路径,文件夹好像是要提前创建
data = {
    'key': '和data['path']相同',
    'Signature': result['authorization'],
    'x-cos-security-token': result['token'],
    'x-cos-meta-fileid': result['cos_file_id']
}
requests.post(result['url'], data=data, files=file)

# 获取下载连接的话去存储里找一个直接拼接就可以了
'https://[这里有一个环境名需要找].tcb.qcloud.la/news_images/1601278105.5322824.jpg'

小程序开发者社区是个鬼社区,我只能帮你到这里了~

相关案例查看更多