VerifVATInvoice/alibabacloud_sample/dbservice.py
liuxiaoqing 11530baefb feat(database): 将数据库从 SQLite 迁移到 MySQL
- 修改了 DBService 类,增加了 MySQL 数据库连接配置
- 重新定义了表结构,适应 MySQL 数据库- 更新了相关的 SQL 查询语句
- 增加了创建数据库的逻辑
- 优化了表创建语句,使用 InnoDB 引擎和 UTF-8 字符集
2025-08-20 15:11:35 +08:00

165 lines
7.4 KiB
Python
Raw Permalink 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.

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)