108 lines
3.7 KiB
Python
108 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
檢查資料庫結構 - 找出翻譯結果儲存方式
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
|
||
# Fix encoding for Windows console
|
||
if sys.stdout.encoding != 'utf-8':
|
||
sys.stdout.reconfigure(encoding='utf-8')
|
||
if sys.stderr.encoding != 'utf-8':
|
||
sys.stderr.reconfigure(encoding='utf-8')
|
||
|
||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'app'))
|
||
|
||
from app import create_app, db
|
||
from sqlalchemy import text
|
||
|
||
def check_db_structure():
|
||
"""檢查資料庫結構"""
|
||
|
||
app = create_app()
|
||
|
||
with app.app_context():
|
||
print("=== 檢查資料庫結構 ===")
|
||
|
||
# 列出所有表
|
||
result = db.session.execute(text("SHOW TABLES"))
|
||
tables = result.fetchall()
|
||
|
||
print(f"資料庫中的表:")
|
||
for table in tables:
|
||
table_name = table[0]
|
||
print(f" - {table_name}")
|
||
|
||
# 檢查表結構
|
||
desc_result = db.session.execute(text(f"DESC {table_name}"))
|
||
columns = desc_result.fetchall()
|
||
|
||
for col in columns:
|
||
print(f" {col[0]} ({col[1]})")
|
||
|
||
# 檢查特定任務的相關資料
|
||
print(f"\n=== 檢查特定任務資料 ===")
|
||
job_uuid = "9c6548ac-2f59-45f4-aade-0a9b3895bbfd"
|
||
|
||
# 查詢任務資料
|
||
job_result = db.session.execute(text("""
|
||
SELECT id, job_uuid, status, progress, total_tokens, total_cost, target_languages
|
||
FROM dt_translation_jobs
|
||
WHERE job_uuid = :uuid
|
||
"""), {'uuid': job_uuid})
|
||
|
||
job_row = job_result.fetchone()
|
||
if job_row:
|
||
print(f"任務ID: {job_row[0]}")
|
||
print(f"UUID: {job_row[1]}")
|
||
print(f"狀態: {job_row[2]}")
|
||
print(f"進度: {job_row[3]}")
|
||
print(f"Tokens: {job_row[4]}")
|
||
print(f"成本: {job_row[5]}")
|
||
print(f"目標語言: {job_row[6]}")
|
||
|
||
job_id = job_row[0]
|
||
|
||
# 查詢相關檔案
|
||
files_result = db.session.execute(text("""
|
||
SELECT file_type, filename, language_code, file_size, created_at
|
||
FROM dt_job_files
|
||
WHERE job_id = :job_id
|
||
"""), {'job_id': job_id})
|
||
|
||
files = files_result.fetchall()
|
||
print(f"\n相關檔案 ({len(files)}):")
|
||
for file_row in files:
|
||
print(f" {file_row[0]}: {file_row[1]} ({file_row[2]}) - {file_row[3]} bytes")
|
||
|
||
# 查詢翻譯cache(如果存在的話)
|
||
if 'dt_translation_cache' in [t[0] for t in tables]:
|
||
cache_result = db.session.execute(text("""
|
||
SELECT COUNT(*) FROM dt_translation_cache
|
||
WHERE source_text IN (
|
||
SELECT SUBSTRING(source_text, 1, 50)
|
||
FROM dt_translation_cache
|
||
LIMIT 5
|
||
)
|
||
"""))
|
||
cache_count = cache_result.scalar()
|
||
print(f"\n翻譯快取記錄數: {cache_count}")
|
||
|
||
# 取幾個範例
|
||
sample_result = db.session.execute(text("""
|
||
SELECT source_text, target_language, translated_text
|
||
FROM dt_translation_cache
|
||
LIMIT 5
|
||
"""))
|
||
|
||
samples = sample_result.fetchall()
|
||
print(f"快取範例:")
|
||
for sample in samples:
|
||
print(f" {sample[0][:50]}... -> [{sample[1]}] {sample[2][:50]}...")
|
||
else:
|
||
print(f"找不到任務: {job_uuid}")
|
||
|
||
if __name__ == "__main__":
|
||
check_db_structure() |