Files
drawlogo/_design-test/kg-schema.py
T

61 lines
2.4 KiB
Python

# 读取 zhenos_kg 的三张表结构 + 既有样本,供生成符合约定的同步 SQL
# 只读,不写入
# 用法: python _design-test/kg-schema.py
import os, re, pymysql
ZF = r'e:\KF_7\ZhenOS-ZF'
env = {}
with open(os.path.join(ZF, '.env.local'), encoding='utf-8') as f:
for ln in f:
m = re.match(r'^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*?)\s*$', ln)
if m:
env[m.group(1)] = m.group(2).strip().strip('"').strip("'")
conn = pymysql.connect(host='rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com', port=3306,
user=env['DB_USERNAME'], password=env['DB_PASSWORD'],
charset='utf8mb4', connect_timeout=12)
cur = conn.cursor()
cur.execute("USE zhenos_kg")
for t in ('kg_entities', 'kg_relations', 'dev_knowledge'):
cur.execute("SHOW CREATE TABLE `%s`" % t)
print('=' * 70)
print(cur.fetchone()[1])
cur.execute("SELECT * FROM kg_entities WHERE entity_name='ZhenosSH:ruoyi-ui'")
cur.execute("SHOW COLUMNS FROM kg_entities")
cols = [c[0] for c in cur.fetchall()]
cur.execute("SELECT * FROM kg_entities WHERE entity_name='ZhenosSH:ruoyi-ui'")
row = cur.fetchone()
print('=' * 70)
print('样本实体 ZhenosSH:ruoyi-ui:')
for c, v in zip(cols, row):
s = str(v)
print(' %-20s %s' % (c, s[:300]))
cur.execute("SELECT * FROM kg_entities WHERE entity_type='ConfigFile' LIMIT 2")
print('-' * 70)
for r in cur.fetchall():
print(' ConfigFile 样本:', dict(zip(cols, [str(x)[:80] for x in r])))
cur.execute("SHOW COLUMNS FROM kg_relations")
rcols = [c[0] for c in cur.fetchall()]
cur.execute("SELECT * FROM kg_relations WHERE source_name LIKE 'ZhenosSH:ruoyi-ui%%' LIMIT 4")
print('-' * 70)
print('ruoyi-ui 的关系样本:')
for r in cur.fetchall():
print(' ', dict(zip(rcols, [str(x)[:60] for x in r])))
cur.execute("SHOW COLUMNS FROM dev_knowledge")
kcols = [c[0] for c in cur.fetchall()]
cur.execute("SELECT type,title,tags,entity_type,entity_name,module,priority,status,source FROM dev_knowledge WHERE type='pitfall' LIMIT 2")
print('-' * 70)
print('dev_knowledge pitfall 样本:')
for r in cur.fetchall():
print(' ', dict(zip(['type','title','tags','entity_type','entity_name','module','priority','status','source'],
[str(x)[:90] for x in r])))
cur.execute("SELECT DISTINCT type FROM dev_knowledge")
print(' dev_knowledge 已有 type:', [r[0] for r in cur.fetchall()])
conn.close()