feat: create_tables.py加pipeline_core/service幂等建表(IF NOT EXISTS不DROP,固化skill_proposals等表)

This commit is contained in:
yumoqing 2026-08-16 19:18:49 +08:00
parent 82629a06ae
commit 21920ad457

View File

@ -6,7 +6,7 @@
用法
py3/bin/python scripts/create_tables.py
"""
import sys, os, asyncio, subprocess
import sys, os, re, asyncio, subprocess
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(SCRIPT_DIR)
@ -20,6 +20,8 @@ from ahserver.serverenv import ServerEnv
from ahserver.globalEnv import initEnv
TABLE_MODULES = ['product_management', 'discount', 'pricing', 'unipay', 'smssend']
# 幂等建表模块(不 DROP用 IF NOT EXISTS避免清空运行时数据如 llm/pipelines/skill_proposals/tasks 等)
IDEMPOTENT_MODULES = ['pipeline_core', 'pipeline-service']
# appbase 系统级配置表(幂等建表 + 默认参数,不 DROP 以免清空运行时数据)
@ -72,6 +74,26 @@ async def main():
n += 1
print(f' tables: {mod} created ({n} statements)')
# 幂等建表模块(去 DROP + IF NOT EXISTS不清理运行时数据
for mod in IDEMPOTENT_MODULES:
models_dir = os.path.join(ROOT_DIR, 'pkgs', mod, 'models')
if not os.path.isdir(models_dir):
print(f' skip {mod}: no models dir')
continue
r = subprocess.run([json2ddl, 'mysql', models_dir], capture_output=True, text=True)
if r.returncode != 0 or not r.stdout.strip():
print(f' skip {mod}: json2ddl failed')
continue
n = 0
for stmt in split_ddl(r.stdout):
s = re.sub(r'(?i)drop\s+table\s+if\s+exists\s+[\w`]+\s*;?', '', stmt)
s = re.sub(r'(?i)CREATE\s+TABLE\s+(`?\w+`?)', r'CREATE TABLE IF NOT EXISTS \1', s)
if not s.strip():
continue
await sor.execute(s, {})
n += 1
print(f' tables: {mod} ensured ({n} statements, idempotent)')
# appbase params 表幂等建表 + 默认参数
try:
await sor.execute(_PARAMS_DDL, {})