Tablestore 的配置
首先,开通阿里云表格存储服务。连接:https://www.aliyun.com/product/ots?spm=a2c4g.11186623.2.7.6f0b23a5RBru3P
开通好之后,创建一个实例:
在开始之前,还要创建 Access Key。
Access Key 的创建参见:https://help.aliyun.com/document_detail/53045.html?spm=a2c4g.11186623.2.12.7ed845d1l6vPRz
需要注意的是,AccessKeySecret 只在创建时显示,不要一出来就手滑关闭。等稍后,我们把它记录下来只会,再关不迟。而且不要忘了把表格存储 AliyunOTSFullAccess 加入到新创建的用户的权限中。
Python 操作 TableStore 的 SDK:https://github.com/aliyun/aliyun-tablestore-python-sdk
阿里云官方 Python SDK:https://help.aliyun.com/document_detail/31723.html?spm=a2c4g.11186623.6.891.563c3d76sdVMpI
首先安装 Tablestore 的 Python 模块:
1 | pip install tablestore |
settings/dev.py
,添加 TableStore 的 API 接口配置:
1 | # tablestore |
Tablestore 目前只支持四种数据类型:INTEGER、STRING、DOUBLE 和 BOOLEAN。其中 DOUBLE 类型不能做主键类型,BOOLEAN 不可以做主键的第一列(分区键)。
为了方便演示,我们另外创建一个单独的子应用 store 来编写 tablestore 的代码:
1 | cd renranapi/apps |
在 settings/dev.py
注册:
1 | INSALL_APPS = [ |
表操作
参见:创建表
Tablestore 里面创建表的时候必须设置表名,主键列,还有表元信息和表的描述项(有效期,版本,吞吐量)。
创建表的时候,除了主键列以外,还可以设置预设字段列。这个不常用,因为当前使用 tablestore 是 NOSQL 数据,所以我们表结构的字段列可以在添加数据的时候再指定。
视图代码:
1 | import tablestore as ts |
注意:
- 通过 postman 测试各个接口。
- 创建表后需要等待 1 分钟进行加载,在此期间对该表的读/写数据操作有可能会失败。
应用程序应该等待表加载完毕后再进行数据操作。 - 创建表格存储的表时必须指定表的主键。
主键包含 1~4 个主键列,每一个主键列都有名字和类型。
路由:
1 | from django.urls import path |
一条数据的操作
参见:单行数据操作
1 | class RowAPIView(APIView): |
路由,代码:
1 | urlpatterns = [ |
多条数据的操作
参见:多行数据操作
1 | from datetime import datetime |
多行数据操作路由代码:
1 | urlpatterns = [ |
Django 自定义终端命令创建和删除表格
在子应用 home 目录下创建 management 包,并在 management 包中创建命令包目录 commands,commands 下面就可以创建命令模块文件了。【注意,app 子应用必须注册到 INSTALL_APPS 应用列表中】
add_argument()
常用的参数:
default:设置参数的默认值
version:打印程序版本信息
nargs:指定选项后接受参数的个数,如果指定这个参数,值将以列表形式存放,即便只有一个元素也是如此。使用命令时,参数个数必须要和指定的数目保持一致,如果指定为
'*'
,则可接受任意数量参数help:参数命令的介绍
在 commands 包下面创建命令文件,并在文件中声明命令类,例如:tablestore.py
,代码:
1 | from django.core.management import BaseCommand |
终端进入后台 renranapi 根目录,数据命令即可测试:
1 | python manage.py tablestore add |
注意:
- 命令类必须继承于
django.core.management.BaseCommand
,并且类名必须叫 Command。 - 命令名称就是文件名,例如,命令文件叫
tablestore.py
,则终端下调用命令为:python manage.py tablestore
- 命令参数左边加上
--
,则表示可选参数,可选参数建议设置默认值,方便在 handle 方法中判断进行默认处理。如果不设置,默认值默认为 None。 - 命令参数如果没有
--
,则表示位置参数,则调用命令时,必须为当前命令传递参数,否则报错!
接下来我们直接在项目中提供 TableStore 的操作用于创建 Feed 系统的表结构。
1 | import tablestore as ts |
以后如果我们就可以直接使用命令创建和删除项目所需要的表格了:
1 | python manage.py tablestore delete # 删除所有已存在的表格 |