# db_utils.py import pyodbc import config def get_sql_conn(): """获取 SQL Server 连接""" c = config.SQL_SERVER_CONN # 显式添加 TrustServerCertificate=yes 以兼容 ODBC Driver 18+ conn_str = ( f"DRIVER={c['driver']};SERVER={c['server']};" f"DATABASE={c['database']};UID={c['uid']};PWD={c['pwd']};" "Encrypt=yes;TrustServerCertificate=yes;" ) return pyodbc.connect(conn_str) def get_access_conn(file_path): """获取 Access 连接""" conn_str = f"DRIVER={config.ACCESS_DRIVER};DBQ={file_path};" return pyodbc.connect(conn_str) def fmt_table(schema, table): """格式化 SQL Server 表名 [schema].[table]""" return f"[{schema}].[{table}]" def get_columns(cursor, table_name): """获取 Access 表的列名""" # Access 查询表名加 [] cursor.execute(f"SELECT TOP 1 * FROM [{table_name}]") return [column[0] for column in cursor.description] def generate_insert_sql(target_schema, target_table, columns): """生成带架构的 INSERT 语句""" full_table_name = fmt_table(target_schema, target_table) col_str = ",".join([f"[{col}]" for col in columns]) placeholders = ",".join(["?"] * len(columns)) return f"INSERT INTO {full_table_name} ({col_str}) VALUES ({placeholders})"