import mysql.connector from mysql.connector import Error class DBService: # MySQL数据库连接配置 db_config = { 'host': '101.200.148.149', 'port': 4406, 'user': 'root', 'password': 'Jian(1@3)', 'database': 'verify_db' } conn = None def __init__(self): """ 初始化函数 """ self.conn = self.get_conn() print("DBService init") self.create_database() self.create_file_data_table() self.create_invoice_table() self.create_verify_log_table() pass def get_conn(self): """ 创建数据库连接 该函数用于创建数据库连接,并返回连接对象 返回值: 连接对象 """ if self.conn is not None and self.conn.is_connected(): return self.conn try: self.conn = mysql.connector.connect(**self.db_config) except Error as e: print(e) return self.conn def create_database(self): """ 创建数据库 """ try: # 连接 MySQL 服务器(不指定数据库) server_config = self.db_config.copy() server_config.pop('database', None) server_conn = mysql.connector.connect(**server_config) cursor = server_conn.cursor() # 创建数据库 cursor.execute(f"CREATE DATABASE IF NOT EXISTS {self.db_config['database']} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") cursor.close() server_conn.close() # 重新连接到指定数据库 self.conn = self.get_conn() except Error as e: print(e) def create_verify_log_table(self): """ 创建验证记录表 该函数用于创建表,并返回创建结果 """ try: # delete_table_sql = """DROP TABLE IF EXISTS verify_log;""" # c = self.get_conn().cursor() # c.execute(delete_table_sql) create_table_sql = """CREATE TABLE IF NOT EXISTS verify_log ( id INT AUTO_INCREMENT PRIMARY KEY, cyjgxx TEXT NOT NULL, inspectionAmount VARCHAR(255) NOT NULL, verify_time VARCHAR(255) NOT NULL, file_path TEXT NOT NULL, `desc` TEXT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;""" c = self.get_conn().cursor() c.execute(create_table_sql) self.get_conn().commit() except Error as e: print(e) # 文件数据表 def create_file_data_table(self): """ 创建文件数据表 该函数用于创建表,并返回创建结果 """ try: # delete_table_sql = """DROP TABLE IF EXISTS file_data;""" # c = self.get_conn().cursor() # c.execute(delete_table_sql) create_table_sql = """CREATE TABLE IF NOT EXISTS file_data ( id INT AUTO_INCREMENT PRIMARY KEY, file_name TEXT NOT NULL, file_path TEXT NOT NULL, file_size INT NOT NULL, file_type VARCHAR(50) NOT NULL, file_time VARCHAR(50) NOT NULL, file_hash VARCHAR(255) NOT NULL, UNIQUE KEY unique_file_hash (file_hash) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;""" c = self.get_conn().cursor() c.execute(create_table_sql) self.get_conn().commit() except Error as e: print(e) # 发票数据表 def create_invoice_table(self): # delete_table_sql = """DROP TABLE IF EXISTS invoice;""" # c = self.get_conn().cursor() # c.execute(delete_table_sql) create_table_sql = """ -- 主表存储发票基本信息 CREATE TABLE IF NOT EXISTS invoice ( id INT AUTO_INCREMENT PRIMARY KEY, checkCode VARCHAR(255), -- 校验码(唯一) drawer VARCHAR(100), -- 开票人 formType VARCHAR(100), -- 表单类型 invoiceAmountPreTax DECIMAL(15,2), -- 税前金额 invoiceCode VARCHAR(50) NOT NULL, -- 发票代码 invoiceDate VARCHAR(50), -- 开票日期 invoiceNumber VARCHAR(50) NOT NULL, -- 发票号码 invoiceTax DECIMAL(15,2), -- 发票税额 invoiceType VARCHAR(100), -- 发票类型 machineCode VARCHAR(50), -- 机器编号 passwordArea TEXT, -- 密码区 printedInvoiceCode VARCHAR(50), -- 打印发票代码 printedInvoiceNumber VARCHAR(50), -- 打印发票号码 purchaserBankAccountInfo TEXT, -- 购买方银行信息 purchaserContactInfo TEXT, -- 购买方联系信息 purchaserName VARCHAR(255), -- 购买方名称 purchaserTaxNumber VARCHAR(100), -- 购买方税号 recipient VARCHAR(100), -- 收款人 remarks TEXT, -- 备注 reviewer VARCHAR(100), -- 复核人 sellerBankAccountInfo TEXT, -- 销售方银行信息 sellerContactInfo TEXT, -- 销售方联系信息 sellerName VARCHAR(255), -- 销售方名称 sellerTaxNumber VARCHAR(100), -- 销售方税号 specialTag VARCHAR(50), -- 特殊标记 title VARCHAR(255), -- 发票标题 totalAmount DECIMAL(15,2), -- 合计金额 totalAmountInWords VARCHAR(255), -- 大写金额 file_path TEXT, -- 文件哈希 verify_time VARCHAR(50), -- 验证时间 verify_status VARCHAR(50), -- 验证结果 inspectionAmount VARCHAR(50), -- 验证次数 `desc` TEXT, -- 备注 desc_files TEXT, -- 备注附件 status VARCHAR(20), -- 是否报销(yes,no) UNIQUE KEY unique_invoice (invoiceCode, invoiceNumber) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; """ try: c = self.get_conn().cursor() c.execute(create_table_sql) self.get_conn().commit() except Error as e: print(e)