初始化
This commit is contained in:
266
init_database.py
Normal file
266
init_database.py
Normal file
@@ -0,0 +1,266 @@
|
||||
"""
|
||||
统一登录网关平台 — 数据库初始化脚本
|
||||
连接 MySQL db1.prod.zgitm.com 创建 11 张表
|
||||
"""
|
||||
import pymysql
|
||||
|
||||
# ===== 数据库连接配置 =====
|
||||
DB_CONFIG = {
|
||||
'host': 'db1.prod.zgitm.com',
|
||||
'port': 3306,
|
||||
'user': 'mokeegateway',
|
||||
'password': 'mokee.',
|
||||
'database': 'mokeegateway',
|
||||
'charset': 'utf8mb4',
|
||||
}
|
||||
|
||||
# ===== 建表 DDL =====
|
||||
DDL_STATEMENTS = [
|
||||
# 1. 业务系统表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_system (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
system_code VARCHAR(64) NOT NULL COMMENT '系统编码,如 msg、oa',
|
||||
system_name VARCHAR(128) NOT NULL COMMENT '系统名称',
|
||||
front_url VARCHAR(256) NOT NULL COMMENT '系统前端地址',
|
||||
backend_url VARCHAR(256) NOT NULL COMMENT '系统后端真实地址',
|
||||
gateway_url VARCHAR(256) NOT NULL COMMENT '网关代理地址',
|
||||
icon VARCHAR(512) DEFAULT NULL COMMENT '系统图标URL',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
description VARCHAR(512) DEFAULT NULL COMMENT '系统描述',
|
||||
created_by BIGINT DEFAULT NULL COMMENT '创建人ID',
|
||||
updated_by BIGINT DEFAULT NULL COMMENT '更新人ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-正常 1-已删除',
|
||||
PRIMARY KEY (id),
|
||||
-- uk_system_code/uk_gateway_url 唯一性由应用层代码校验
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='业务系统表';
|
||||
""",
|
||||
|
||||
# 2. 系统放行接口表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_api (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
system_id BIGINT NOT NULL COMMENT '关联系统ID',
|
||||
api_path VARCHAR(256) NOT NULL COMMENT '接口路径',
|
||||
api_method VARCHAR(10) NOT NULL COMMENT '请求方式:GET/POST/PUT/DELETE',
|
||||
api_name VARCHAR(128) DEFAULT NULL COMMENT '接口名称',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_system_id (system_id),
|
||||
UNIQUE KEY uk_system_path_method (system_id, api_path, api_method)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统放行接口表';
|
||||
""",
|
||||
|
||||
# 3. 用户表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_user (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
username VARCHAR(64) NOT NULL COMMENT '登录账号',
|
||||
password VARCHAR(256) NOT NULL COMMENT 'BCrypt加密密码',
|
||||
real_name VARCHAR(64) DEFAULT NULL COMMENT '真实姓名',
|
||||
email VARCHAR(128) DEFAULT NULL COMMENT '邮箱',
|
||||
phone VARCHAR(32) DEFAULT NULL COMMENT '手机号',
|
||||
avatar VARCHAR(512) DEFAULT NULL COMMENT '头像URL',
|
||||
post VARCHAR(64) DEFAULT NULL COMMENT '岗位',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-正常 2-锁定',
|
||||
lock_until DATETIME DEFAULT NULL COMMENT '锁定截止时间',
|
||||
login_fail_count INT NOT NULL DEFAULT 0 COMMENT '连续登录失败次数',
|
||||
last_login_ip VARCHAR(64) DEFAULT NULL COMMENT '最后登录IP',
|
||||
last_login_time DATETIME DEFAULT NULL COMMENT '最后登录时间',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-正常 1-已删除',
|
||||
PRIMARY KEY (id),
|
||||
-- 用户名/邮箱唯一性由应用层代码校验
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
""",
|
||||
|
||||
# 4. 用户系统绑定表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_user_system (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||||
system_id BIGINT NOT NULL COMMENT '系统ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user_system (user_id, system_id),
|
||||
KEY idx_system_id (system_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户系统绑定表';
|
||||
""",
|
||||
|
||||
# 5. 角色表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_role (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
system_id BIGINT NOT NULL COMMENT '所属系统ID',
|
||||
role_name VARCHAR(64) NOT NULL COMMENT '角色名称',
|
||||
role_code VARCHAR(64) NOT NULL COMMENT '角色编码',
|
||||
description VARCHAR(256) DEFAULT NULL COMMENT '角色描述',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
created_by BIGINT DEFAULT NULL COMMENT '创建人ID',
|
||||
updated_by BIGINT DEFAULT NULL COMMENT '更新人ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0-正常 1-已删除',
|
||||
PRIMARY KEY (id),
|
||||
-- uk_system_role_code 唯一性由应用层代码校验
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
""",
|
||||
|
||||
# 6. 用户角色表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_user_role (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user_role (user_id, role_id),
|
||||
KEY idx_role_id (role_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色表';
|
||||
""",
|
||||
|
||||
# 7. 菜单表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_menu (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
system_id BIGINT NOT NULL COMMENT '所属系统ID',
|
||||
parent_id BIGINT NOT NULL DEFAULT 0 COMMENT '父菜单ID,0表示顶级',
|
||||
menu_name VARCHAR(64) NOT NULL COMMENT '菜单名称',
|
||||
menu_path VARCHAR(256) DEFAULT NULL COMMENT '路由路径',
|
||||
component VARCHAR(256) DEFAULT NULL COMMENT '前端组件路径',
|
||||
icon VARCHAR(128) DEFAULT NULL COMMENT '菜单图标',
|
||||
menu_type TINYINT NOT NULL COMMENT '菜单类型:1-目录 2-菜单 3-按钮',
|
||||
permission VARCHAR(128) DEFAULT NULL COMMENT '权限标识(按钮用)',
|
||||
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_system_id (system_id),
|
||||
KEY idx_parent_id (parent_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';
|
||||
""",
|
||||
|
||||
# 8. 角色菜单表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_role_menu (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
menu_id BIGINT NOT NULL COMMENT '菜单ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_role_menu (role_id, menu_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单表';
|
||||
""",
|
||||
|
||||
# 9. 登录日志表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_login_log (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id BIGINT DEFAULT NULL COMMENT '用户ID',
|
||||
username VARCHAR(64) NOT NULL COMMENT '登录账号',
|
||||
system_id BIGINT DEFAULT NULL COMMENT '登录目标系统ID',
|
||||
login_ip VARCHAR(64) DEFAULT NULL COMMENT '登录IP',
|
||||
user_agent VARCHAR(512) DEFAULT NULL COMMENT '浏览器User-Agent',
|
||||
status TINYINT NOT NULL COMMENT '登录状态:0-失败 1-成功',
|
||||
fail_reason VARCHAR(256) DEFAULT NULL COMMENT '失败原因',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登录时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_user_id (user_id),
|
||||
KEY idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='登录日志表';
|
||||
""",
|
||||
|
||||
# 10. 操作日志表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_operation_log (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id BIGINT DEFAULT NULL COMMENT '操作人ID',
|
||||
username VARCHAR(64) DEFAULT NULL COMMENT '操作人名称',
|
||||
system_id BIGINT DEFAULT NULL COMMENT '所属系统ID',
|
||||
module VARCHAR(64) DEFAULT NULL COMMENT '操作模块',
|
||||
action VARCHAR(32) DEFAULT NULL COMMENT '操作类型:CREATE/UPDATE/DELETE/QUERY/IMPORT/EXPORT',
|
||||
request_url VARCHAR(256) DEFAULT NULL COMMENT '请求地址',
|
||||
request_method VARCHAR(10) DEFAULT NULL COMMENT '请求方式',
|
||||
request_body TEXT DEFAULT NULL COMMENT '请求体',
|
||||
response_status INT DEFAULT NULL COMMENT '响应状态码',
|
||||
error_msg TEXT DEFAULT NULL COMMENT '错误信息',
|
||||
cost_time INT DEFAULT NULL COMMENT '耗时(毫秒)',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_user_id (user_id),
|
||||
KEY idx_created_at (created_at),
|
||||
KEY idx_system_id (system_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
|
||||
""",
|
||||
|
||||
# 11. 数据字典表
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS sys_dict (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
dict_type VARCHAR(64) NOT NULL COMMENT '字典类型',
|
||||
dict_label VARCHAR(128) NOT NULL COMMENT '字典标签',
|
||||
dict_value VARCHAR(128) NOT NULL COMMENT '字典值',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_type_value (dict_type, dict_value)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据字典表';
|
||||
""",
|
||||
]
|
||||
|
||||
|
||||
def main():
|
||||
"""连接数据库,执行建表"""
|
||||
conn = None
|
||||
try:
|
||||
print(f"[INFO] Connecting to MySQL {DB_CONFIG['host']}:{DB_CONFIG['port']} ...")
|
||||
conn = pymysql.connect(**DB_CONFIG)
|
||||
cursor = conn.cursor()
|
||||
print(f"[OK] Connected, database: {DB_CONFIG['database']}")
|
||||
|
||||
# 先查现有表
|
||||
cursor.execute("SHOW TABLES")
|
||||
existing = {row[0] for row in cursor.fetchall()}
|
||||
print(f"\n[INFO] Existing tables: {existing if existing else '(empty)'}")
|
||||
|
||||
# 逐个执行 DDL
|
||||
created = 0
|
||||
skipped = 0
|
||||
for ddl in DDL_STATEMENTS:
|
||||
# 提取表名
|
||||
table_name = ddl.split("TABLE IF NOT EXISTS")[1].strip().split("(")[0].strip().strip('`')
|
||||
if table_name in existing:
|
||||
print(f" [SKIP] {table_name} already exists")
|
||||
skipped += 1
|
||||
else:
|
||||
cursor.execute(ddl.strip())
|
||||
conn.commit()
|
||||
print(f" [OK] {table_name} created")
|
||||
created += 1
|
||||
|
||||
print(f"\n===== Done: {created} created, {skipped} skipped =====")
|
||||
|
||||
# 展示所有表
|
||||
cursor.execute("SHOW TABLES")
|
||||
tables = [row[0] for row in cursor.fetchall()]
|
||||
print(f"Current tables ({len(tables)}): {tables}")
|
||||
|
||||
except pymysql.Error as e:
|
||||
print(f"[ERROR] Database error: {e}")
|
||||
finally:
|
||||
if conn:
|
||||
conn.close()
|
||||
print("\n[INFO] Connection closed.")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user