# 数据库初始化脚本 本目录包含用于初始化数据库的脚本,包括用户认证相关的表和微信用户表等。 ## 用户表初始化 用户数据现在存储在PostgreSQL数据库中,表名为`users`。有两种方式可以初始化用户表: ### 1. 使用Python脚本 运行以下命令可以自动创建用户表和相关索引: ```bash # 在项目根目录执行 python app/scripts/init_db.py ``` 这将自动创建以下内容: - 用户表结构 - 用户名索引 ### 2. 使用SQL脚本 如果你想直接在PostgreSQL客户端中执行,可以使用提供的SQL脚本: ```bash # 使用psql命令行工具执行 psql -U postgres -d dataops -f app/scripts/create_user_table.sql # 或者直接在pgAdmin或其他PostgreSQL客户端中复制粘贴脚本内容执行 ``` ## 数据库连接配置 数据库连接配置在`app/core/system/auth.py`文件中的`get_pg_connection`函数中定义: ```python 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 ## 用户数据迁移 如果您之前使用的是文件存储方式,可以使用以下命令将用户数据迁移到数据库: ```bash 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应用上下文中创建微信用户表: ```bash # 在项目根目录执行 python app/scripts/create_wechat_user_table.py --action create ``` 检查表是否存在: ```bash python app/scripts/create_wechat_user_table.py --action check ``` 删除表(谨慎使用): ```bash python app/scripts/create_wechat_user_table.py --action drop ``` ### 2. 使用PostgreSQL连接脚本 运行以下命令可以直接通过psycopg2连接数据库创建表: ```bash # 在项目根目录执行 python app/scripts/migrate_wechat_users.py --action migrate ``` 回滚表(删除表): ```bash python app/scripts/migrate_wechat_users.py --action rollback ``` ### 3. 使用SQL脚本 如果你想直接在PostgreSQL客户端中执行,可以使用提供的SQL脚本: ```bash # 使用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`字段的触发器,每次更新记录时会自动设置为当前时间。 ## 微信用户功能使用 在代码中可以使用以下方式操作微信用户: ```python 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"}) ```