Files
njts-accounting-core/verify_table_structure.py
2026-02-20 15:47:27 +09:00

85 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
sys.path.insert(0, 'backend')
os.environ['DB_HOST'] = '192.168.0.61'
os.environ['DB_NAME'] = 'njts_acct'
os.environ['DB_USER'] = 'njts_app'
os.environ['DB_PASSWORD'] = 'njts_app2025'
os.environ['DB_PORT'] = '55432'
from app.core.database import get_connection
with get_connection() as conn:
with conn.cursor() as cur:
print('\n【 确认journal_lines表的字段用途 】\n')
print('1. journal_lines 中的 account_id 存的是什么?')
cur.execute("""
SELECT DISTINCT l.account_id FROM journal_lines l LIMIT 5
""")
sample_ids = [row['account_id'] for row in cur.fetchall()]
print(f" 样本account_id值: {sample_ids}")
for aid in sample_ids[:2]:
cur.execute("SELECT account_code, account_name FROM accounts WHERE account_id = %s", (aid,))
row = cur.fetchone()
if row:
print(f" - account_id={aid} 对应 account_code={row['account_code']}, name={row['account_name']}")
print('\n2. 检查是否有任何地方用account_code作为外键')
# 检查外键约束
cur.execute("""
SELECT table_name, column_name, constraint_name
FROM information_schema.key_column_usage
WHERE table_name = 'journal_lines'
ORDER BY table_name
""")
print(" journal_lines表的外键:")
has_fk = False
for row in cur.fetchall():
print(f" - {row['column_name']}: {row['constraint_name']}")
has_fk = True
if not has_fk:
print(" (没有外键约束)")
print('\n3. journal_lines 中是否有account_code这个字段')
cur.execute("""
SELECT column_name FROM information_schema.columns
WHERE table_name = 'journal_lines'
ORDER BY ordinal_position
""")
columns = [row['column_name'] for row in cur.fetchall()]
print(f" journal_lines的字段: {columns}")
if 'account_code' in columns:
print(" ⚠️ 有account_code字段")
else:
print(" ✓ 没有account_code字段只用account_id")
print('\n4. 是否所有journal_lines的account_id都能在accounts表找到')
cur.execute("""
SELECT COUNT(DISTINCT l.account_id) as total,
COUNT(DISTINCT CASE WHEN a.account_id IS NOT NULL THEN l.account_id END) as matched
FROM journal_lines l
LEFT JOIN accounts a ON a.account_id = l.account_id
""")
row = cur.fetchone()
print(f" 总的不同account_id: {row['total']}")
print(f" 能在accounts表匹配到的: {row['matched']}")
if row['total'] != row['matched']:
print(" ⚠️ 有孤立的account_id")
cur.execute("""
SELECT DISTINCT l.account_id FROM journal_lines l
LEFT JOIN accounts a ON a.account_id = l.account_id
WHERE a.account_id IS NULL
""")
orphans = [r['account_id'] for r in cur.fetchall()]
print(f" 孤立的account_id: {orphans}")
else:
print(" ✓ 全部都能匹配")