2025-11-12 14:01:26 +08:00
|
|
|
|
# database/sql_server_connection.py
|
|
|
|
|
|
"""SQL Server数据库连接模块"""
|
|
|
|
|
|
import pyodbc
|
|
|
|
|
|
from config.settings import SQL_SERVER_CONFIG
|
|
|
|
|
|
|
|
|
|
|
|
class SQLServerConnection:
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
self.config = SQL_SERVER_CONFIG
|
|
|
|
|
|
|
|
|
|
|
|
def connect(self):
|
|
|
|
|
|
"""建立数据库连接"""
|
|
|
|
|
|
connection_string = (
|
|
|
|
|
|
f"DRIVER={self.config['driver']};"
|
|
|
|
|
|
f"SERVER={self.config['server']};"
|
|
|
|
|
|
f"DATABASE={self.config['database']};"
|
|
|
|
|
|
f"UID={self.config['username']};"
|
|
|
|
|
|
f"PWD={self.config['password']};"
|
|
|
|
|
|
)
|
|
|
|
|
|
return pyodbc.connect(connection_string)
|
|
|
|
|
|
|
|
|
|
|
|
def get_mix_weight_info(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取所有配比号及其对应每方重量的信息
|
|
|
|
|
|
重量计算方式:U1到U17的和,NULL值不计入
|
|
|
|
|
|
"""
|
|
|
|
|
|
connection = self.connect()
|
|
|
|
|
|
cursor = connection.cursor()
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 查询所有配比信息
|
|
|
|
|
|
query = """
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
Code,
|
|
|
|
|
|
U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U13, U14, U15, U16, U17
|
2025-11-17 21:56:11 +08:00
|
|
|
|
FROM Recipe_back
|
2025-11-12 14:01:26 +08:00
|
|
|
|
WHERE Code IS NOT NULL
|
|
|
|
|
|
ORDER BY Code
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
cursor.execute(query)
|
|
|
|
|
|
results = cursor.fetchall()
|
|
|
|
|
|
|
|
|
|
|
|
mix_info = []
|
|
|
|
|
|
for row in results:
|
|
|
|
|
|
code = row[0]
|
|
|
|
|
|
weights = [row[i] for i in range(1, 18)] # U1到U17
|
|
|
|
|
|
|
|
|
|
|
|
# 计算总重量(忽略NULL值)
|
|
|
|
|
|
total_weight = sum(weight for weight in weights if weight is not None and weight != 'NULL')
|
|
|
|
|
|
|
|
|
|
|
|
mix_info.append({
|
|
|
|
|
|
"Code": code,
|
|
|
|
|
|
"TotalWeight": round(total_weight, 2) # 保留两位小数
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
return mix_info
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
print(f"查询配比信息时出错: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
finally:
|
|
|
|
|
|
connection.close()
|