Madoka Madoka
首页
  • 文档 v4
  • 旧版文档 v3
  • 开发文档 v4
  • 旧版开发文档 v3
更新日志
加入QQ群 (opens new window)
GitHub (opens new window)
首页
  • 文档 v4
  • 旧版文档 v3
  • 开发文档 v4
  • 旧版开发文档 v3
更新日志
加入QQ群 (opens new window)
GitHub (opens new window)
  • 插件开发文档

    • 开始
    • 创建一个新的插件
    • 命令解析器
    • 消息队列 & 消息发送器
    • 计划任务
    • 数据表配置
      • 准备工作
      • 说明
      • 初始化数据表
      • 更新数据表
        • 内容格式
        • 时间格式
        • 完整示例
  • API列表
  • 其他语言SDK
  • developer-v4
  • 插件开发文档
MadokaProject
2022-07-29
目录

数据表配置

# 准备工作

若您的插件有数据表需求,您可以在插件目录创建一个 database 目录,并创建一个 database.py 文件作为初始化数据表文件。

注意

初始化数据表文件必须永远为最新版本!

# 说明

Madoka 使用 peewee 框架作为 ORM,支持 MySQL 和 SQLite 数据库。

# 初始化数据表

使用 peewee 框架,您需要在 database.py 文件中继承 ORM 类来映射数据表对象。

from peewee import *

from app.util.dao import ORM


class Test(ORM):
    id = AutoField()
    name = CharField()
    age = IntegerField()
    create_time = DateTimeField()


Test.create_table()  # 以该语句结束

您可以在 database.py 文件中创建多个数据表对象,但是每个对象都必须调用一次 create_table() 方法,否则 Madoka 无法初始化您的数据库。

提示

关于 peewee 的详细用法,您可以参考 peewee 官方文档 (opens new window)。

# 更新数据表

为了保证用户数据表永远是最新版本,在数据表每次有变动时,都应创建一个以 {日期}-{时间}.sql 为名的 sql 文件,在其中写下对应的修改语句。并修改 database.sql 文件,让其保持最新。

更新文件命名时间必须不低于推送代码时间,若您仅是自己使用,时间应不低于上次更新时间。

# 内容格式

由于支持 MySQL 和 SQLite,所以您需要在 sql 文件中分别写 MySQL 和 SQLite 的修改语句。

每条语句以数据库类型开头,以 ; 结尾。如: mysql: .......;

mysql: ALTER TABLE test MODIFY COLUMN name VARCHAR(255) NOT NULL;
sqlite: ALTER TABLE test RENAME TO test_temp;
sqlite: CREATE TABLE test (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name VARCHAR(255) NOT NULL,
    create_time DATETIME NOT NULL
    );
sqlite: INSERT INTO test (id, name, create_time) SELECT id, name, create_time FROM test_temp;
sqlite: DROP TABLE test_temp;

提示

若二者修改语句完全一致,您可以去掉语句前的数据库类型,只写一次。

ALTER TABLE test RENAME TO test1;

# 时间格式

年月日-时分.sql

年: 4 位
月: 2 位
日: 2 位
时: 2 位
分: 2 位

# 完整示例

  • database.py
from peewee import *

from app.util.dao import ORM


class Demo(ORM):
    name = FixedCharField(4)
    """属性名"""
    uid = IntegerField()
    """用户 ID"""
    datetime = DateTimeField(null=True)
    """修改时间"""
    value = CharField(max_length=256)
    """属性值"""

    class Meta:
        primary_key = CompositeKey('name', 'uid')
  • 20220729-1900.sql
mysql: alter table demo add datetime datetime null comment '修改时间' after name;
sqlite: alter table demo rename to demo_temp;
sqlite: create table demo (
    name char(4) not null,
    uid integer not null,
    datetime datetime null,
    value varchar(256) not null,
    primary key (name, uid)
    );
sqlite: insert into demo (name, uid, value) select name, uid, value from demo_temp;
sqlite: drop table demo_temp;
上次更新: 2022/11/22, 00:08:13
计划任务
API列表

← 计划任务 API列表→

Theme by Vdoing | Copyright © 2021-2022 Madoka Project
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式