#!/usr/bin/env python3 """測試完整 76 欄位同步""" import sqlite3 import psycopg2 # 取得所有欄位 sqlite_conn = sqlite3.connect("data/momo_database.db") cursor = sqlite_conn.cursor() cursor.execute("PRAGMA table_info(realtime_sales_monthly)") col_info = cursor.fetchall() columns = [c[1] for c in col_info] print(f"共 {len(columns)} 個欄位") # 檢查特殊字元 special_chars = [] for i, col in enumerate(columns): if "%" in col or "(" in col or ")" in col: special_chars.append((i, col)) print(f"\n包含特殊字元的欄位: {len(special_chars)}") for i, col in special_chars: print(f" {i}: {col}") # 測試完整 76 欄位同步 print("\n測試完整欄位同步...") cursor.execute("SELECT * FROM realtime_sales_monthly LIMIT 10") rows = cursor.fetchall() pg_conn = psycopg2.connect( host="localhost", port="5432", user="momo", password="wooo_pg_2026", database="momo_analytics" ) pg_cursor = pg_conn.cursor() # 建立表格 pg_cursor.execute("DROP TABLE IF EXISTS test_full76 CASCADE") cols_def = ", ".join([f'"{c}" TEXT' for c in columns]) pg_cursor.execute(f"CREATE TABLE test_full76 (id SERIAL PRIMARY KEY, {cols_def})") pg_conn.commit() print("表建立成功") # 插入資料 cols_sql = ", ".join([f'"{c}"' for c in columns]) placeholders = ", ".join(["%s"] * len(columns)) sql = f"INSERT INTO test_full76 ({cols_sql}) VALUES ({placeholders})" success_count = 0 for i, row in enumerate(rows): try: pg_cursor.execute(sql, tuple(row)) success_count += 1 except Exception as e: print(f"第 {i} 筆失敗: {e}") pg_conn.rollback() pg_conn.commit() print(f"成功插入: {success_count}/{len(rows)} 筆") pg_cursor.execute("DROP TABLE test_full76 CASCADE") pg_conn.commit() pg_conn.close() sqlite_conn.close()