# -*- coding: utf-8 -*- import os import psycopg2 class AlphaTxtImporter: def __init__(self, txt_file='alpha.txt'): self.database_name = "alpha" self.txt_file = txt_file self.connection = None def get_connection(self): """获取数据库连接""" if self.connection is None or self.connection.closed: self.connection = psycopg2.connect( host="localhost", port="5432", database=self.database_name, user="jack", password="aaaAAA111" ) return self.connection def close_connection(self): """关闭数据库连接""" if self.connection and not self.connection.closed: self.connection.close() def load_alpha_from_txt(self): """从txt文件加载alpha表达式""" if not os.path.exists(self.txt_file): print(f"未找到 {self.txt_file} 文件") return [] alpha_list = [] with open(self.txt_file, 'r', encoding='utf-8') as file: for line_num, line in enumerate(file, 1): line = line.strip() if line and not line.startswith('#'): # 跳过空行和注释行 alpha_list.append(line) print(f"第 {line_num} 行: {line}") return alpha_list def import_to_database(self, alpha_list): """导入alpha表达式到数据库""" if not alpha_list: print("没有要导入的alpha表达式") return 0 conn = self.get_connection() cursor = conn.cursor() imported_count = 0 duplicate_count = 0 for alpha in alpha_list: try: # 使用 ON CONFLICT 避免重复插入 cursor.execute(''' INSERT INTO alpha_prepare (alpha, unused) VALUES (%s, %s) ON CONFLICT (alpha) DO NOTHING ''', (alpha, True)) if cursor.rowcount > 0: imported_count += 1 print(f"✅ 导入: {alpha}") else: duplicate_count += 1 print(f"⏭️ 跳过(重复): {alpha}") except Exception as e: print(f"❌ 导入失败: {alpha} - 错误: {e}") continue conn.commit() cursor.close() return imported_count, duplicate_count def check_existing_data(self): """检查数据库中已存在的数据""" conn = self.get_connection() cursor = conn.cursor() cursor.execute("SELECT COUNT(*) FROM alpha_prepare") total_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM alpha_prepare WHERE unused = TRUE") unused_count = cursor.fetchone()[0] cursor.close() print(f"数据库统计:") print(f" - 总alpha数量: {total_count}") print(f" - 未使用的alpha数量: {unused_count}") return total_count, unused_count def run_import(self): """执行导入过程""" print(f"开始从 {self.txt_file} 导入alpha表达式到 PostgreSQL...") # 检查现有数据 print("\n=== 数据库当前状态 ===") total_count, unused_count = self.check_existing_data() # 加载txt文件 print(f"\n=== 加载 {self.txt_file} ===") alpha_list = self.load_alpha_from_txt() print(f"从文件加载了 {len(alpha_list)} 个alpha表达式") if not alpha_list: print("没有找到有效的alpha表达式,导入终止") return # 导入到数据库 print(f"\n=== 导入到数据库 ===") imported_count, duplicate_count = self.import_to_database(alpha_list) # 显示结果 print(f"\n=== 导入结果 ===") print(f"文件中的表达式数量: {len(alpha_list)}") print(f"成功导入: {imported_count} 条") print(f"跳过重复: {duplicate_count} 条") # 再次检查数据库状态 print(f"\n=== 导入后数据库状态 ===") new_total_count, new_unused_count = self.check_existing_data() print(f"新增记录: {new_total_count - total_count} 条") print(f"新增未使用记录: {new_unused_count - unused_count} 条") print("\n导入完成!") def main(): # 可以指定不同的txt文件 txt_file = 'alpha.txt' # 可以改为其他文件名 importer = AlphaTxtImporter(txt_file) try: importer.run_import() finally: importer.close_connection() if __name__ == "__main__": main()