初步迁移数据库
This commit is contained in:
@@ -1,3 +1,36 @@
|
||||
from typing import Sequence
|
||||
from sqlmodel import select
|
||||
from .setting import Setting
|
||||
import tool
|
||||
|
||||
default_settings: list[Setting] = [
|
||||
Setting(type='string', name='version', value='1.0.0'),
|
||||
Setting(type='int', name='ver', value='1'),
|
||||
Setting(type='string', name='account', value='admin@yuxiaoqiu.cn'),
|
||||
]
|
||||
|
||||
async def migration(session):
|
||||
# 先准备基础配置
|
||||
settings: list[Setting] = default_settings.copy()
|
||||
|
||||
# 生成初始密码与密钥
|
||||
admin_password = tool.generate_password()
|
||||
print(f"密码(请牢记,后续不再显示): {admin_password}")
|
||||
|
||||
settings.append(Setting(type='string', name='password', value=tool.hash_password(admin_password)))
|
||||
settings.append(Setting(type='string', name='SECRET_KEY', value=tool.generate_password(64)))
|
||||
|
||||
# 读取库里已存在的 name,避免主键冲突
|
||||
names = [s.name for s in settings]
|
||||
exist_stmt = select(Setting.name).where(Setting.name.in_(names))
|
||||
exist_rs = await session.exec(exist_stmt)
|
||||
existed: set[str] = set(exist_rs.all())
|
||||
|
||||
to_insert = [s for s in settings if s.name not in existed]
|
||||
if to_insert:
|
||||
# 使用你写好的通用新增方法(是类方法),并传入会话
|
||||
await Setting.add(session, to_insert, refresh=False)
|
||||
|
||||
"""
|
||||
# 初始化设置表数据
|
||||
async with db.execute("SELECT name FROM fr_settings WHERE name = 'version'") as cursor:
|
||||
|
||||
Reference in New Issue
Block a user