README.md 5.3 KB

数据库初始化脚本

本目录包含用于初始化数据库的脚本,包括用户认证相关的表和微信用户表等。

用户表初始化

用户数据现在存储在PostgreSQL数据库中,表名为users。有两种方式可以初始化用户表:

1. 使用Python脚本

运行以下命令可以自动创建用户表和相关索引:

# 在项目根目录执行
python app/scripts/init_db.py

这将自动创建以下内容:

  • 用户表结构
  • 用户名索引

2. 使用SQL脚本

如果你想直接在PostgreSQL客户端中执行,可以使用提供的SQL脚本:

# 使用psql命令行工具执行
psql -U postgres -d dataops -f app/scripts/create_user_table.sql

# 或者直接在pgAdmin或其他PostgreSQL客户端中复制粘贴脚本内容执行

数据库连接配置

数据库连接配置在app/core/system/auth.py文件中的get_pg_connection函数中定义:

pg_pool = psycopg2.pool.SimpleConnectionPool(
    1, 20,
    host="localhost",
    database="dataops",
    user="postgres",
    password="postgres",
    port="5432"
)

在生产环境中,建议将这些连接参数移至配置文件或环境变量中。

用户表结构

用户表(users)具有以下字段:

  • id (VARCHAR(100)): 用户唯一标识符,主键
  • username (VARCHAR(50)): 用户名,唯一非空
  • password (VARCHAR(100)): 密码(使用base64编码),非空
  • created_at (FLOAT): 创建时间戳,非空
  • last_login (FLOAT): 最后登录时间戳
  • is_admin (BOOLEAN): 是否为管理员,默认为false

用户数据迁移

如果您之前使用的是文件存储方式,可以使用以下命令将用户数据迁移到数据库:

python app/scripts/migrate_users.py

这个脚本会:

  1. 读取app/data/users.json文件中的用户数据
  2. 将数据导入到PostgreSQL数据库的users表中
  3. 备份原始JSON文件

安全建议

在生产环境中,建议进行以下安全增强:

  1. 使用更强的密码哈希算法(如bcrypt)替代base64编码
  2. 将数据库连接参数存储在环境变量或安全的配置文件中
  3. 为数据库用户设置最小权限原则
  4. 启用PostgreSQL的SSL连接
  5. 定期备份用户数据

微信用户表初始化

微信用户数据存储在PostgreSQL数据库中,表名为wechat_users。有以下几种方式可以初始化微信用户表:

1. 使用Flask应用上下文脚本(推荐)

运行以下命令可以在Flask应用上下文中创建微信用户表:

# 在项目根目录执行
python app/scripts/create_wechat_user_table.py --action create

检查表是否存在:

python app/scripts/create_wechat_user_table.py --action check

删除表(谨慎使用):

python app/scripts/create_wechat_user_table.py --action drop

2. 使用PostgreSQL连接脚本

运行以下命令可以直接通过psycopg2连接数据库创建表:

# 在项目根目录执行
python app/scripts/migrate_wechat_users.py --action migrate

回滚表(删除表):

python app/scripts/migrate_wechat_users.py --action rollback

3. 使用SQL脚本

如果你想直接在PostgreSQL客户端中执行,可以使用提供的SQL脚本:

# 使用psql命令行工具执行
psql -U postgres -d dataops -f database/create_wechat_users.sql

# 或者直接在pgAdmin或其他PostgreSQL客户端中复制粘贴脚本内容执行

微信用户表结构

微信用户表(wechat_users)具有以下字段:

  • id (SERIAL): 主键ID,自增
  • wechat_code (VARCHAR(255)): 微信授权码/openid,唯一标识,非空且唯一
  • phone_number (VARCHAR(20)): 用户手机号码,可选
  • id_card_number (VARCHAR(18)): 用户身份证号码,可选
  • login_status (BOOLEAN): 当前登录状态,默认false,非空
  • login_time (TIMESTAMP WITH TIME ZONE): 最后登录时间
  • user_status (VARCHAR(20)): 用户账户状态,默认'active',非空
    • active: 活跃
    • inactive: 非活跃
    • suspended: 暂停
    • deleted: 已删除
  • created_at (TIMESTAMP WITH TIME ZONE): 账户创建时间,默认当前时间,非空
  • updated_at (TIMESTAMP WITH TIME ZONE): 信息更新时间,默认当前时间,非空

微信用户表索引

为了提高查询性能,表包含以下索引:

  • idx_wechat_users_wechat_code: 微信授权码索引
  • idx_wechat_users_phone_number: 手机号码索引
  • idx_wechat_users_login_status: 登录状态索引
  • idx_wechat_users_user_status: 用户状态索引

微信用户表触发器

表包含自动更新updated_at字段的触发器,每次更新记录时会自动设置为当前时间。

微信用户功能使用

在代码中可以使用以下方式操作微信用户:

from app.core.data_parse.calendar import (
    register_wechat_user, 
    login_wechat_user, 
    logout_wechat_user,
    get_wechat_user_info,
    update_wechat_user_info
)

# 注册用户
result = register_wechat_user("wx_openid_123", "13800138000", "110101199001011234")

# 用户登录
result = login_wechat_user("wx_openid_123")

# 用户登出
result = logout_wechat_user("wx_openid_123")

# 获取用户信息
result = get_wechat_user_info("wx_openid_123")

# 更新用户信息
result = update_wechat_user_info("wx_openid_123", {"phone_number": "13900139000"})