当前位置: 首页 > wzjs >正文

成都眉山网站建设东莞网站建设地点优化

成都眉山网站建设,东莞网站建设地点优化,西柳网站建设,国内购物网站哪个最好目录 一、使用说明二、源代码三、注释 一、使用说明 1.初始化模型类: def __init__(self, db_url: str, model_classes: Dict[str, Type[Base]]):"""初始化导入器:param db_url: 数据库连接URL (e.g. sqlite:///mydatabase.db):param model_classes:…

目录

  • 一、使用说明
  • 二、源代码
  • 三、注释

在这里插入图片描述

一、使用说明


1.初始化模型类:

    def __init__(self, db_url: str, model_classes: Dict[str, Type[Base]]):"""初始化导入器:param db_url: 数据库连接URL (e.g. 'sqlite:///mydatabase.db'):param model_classes: 模型类字典 {表名: 模型类}"""self.db_url = db_urlself.model_classes = model_classesself.engine = self._create_engine()self.Session = sessionmaker(bind=self.engine)

将所有数据库模型类定义在单独的文件中
确保每个模型类继承自Base
2.创建导入器实例:

importer = DatabaseImporter(db_url='sqlite:///mydatabase.db',model_classes={'talent': Talent,'enterprise': Enterprise}
)

3.初始化数据库:

importer.initialize_database()

4.导入Excel数据:

importer.import_from_excel(excel_path='path/to/file.xlsx',model_name='talent',column_mapping={'Excel列名': '模型属性名',# ...}
)

二、源代码


import os
import logging
from typing import Type, Dict, Optional
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy.pool import QueuePool
from sqlalchemy.exc import SQLAlchemyError# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)Base = declarative_base()class DatabaseImporter:"""可复用的数据库导入工具类功能:- 自动创建数据库连接- 处理Excel合并单元格- 数据清洗和验证- 批量数据导入"""def __init__(self, db_url: str, model_classes: Dict[str, Type[Base]]):"""初始化导入器:param db_url: 数据库连接URL (e.g. 'sqlite:///mydatabase.db'):param model_classes: 模型类字典 {表名: 模型类}"""self.db_url = db_urlself.model_classes = model_classesself.engine = self._create_engine()self.Session = sessionmaker(bind=self.engine)def _create_engine(self):"""创建数据库引擎"""return create_engine(self.db_url,poolclass=QueuePool,pool_size=5,max_overflow=10,pool_timeout=30,pool_recycle=1800)def initialize_database(self):"""初始化数据库表结构"""try:Base.metadata.create_all(self.engine)logger.info("数据库表创建成功!")except Exception as e:logger.error(f"创建数据库表失败: {str(e)}")raise@staticmethoddef _clean_dataframe(df: pd.DataFrame) -> pd.DataFrame:"""数据清洗处理"""# 处理合并单元格df = df.ffill()# 将NaN转换为Nonereturn df.where(pd.notnull(df), None)def import_from_excel(self,excel_path: str,model_name: str,column_mapping: Optional[Dict[str, str]] = None,batch_size: int = 100) -> int:"""从Excel导入数据到指定模型:param excel_path: Excel文件路径:param model_name: 模型名称(在model_classes中定义的):param column_mapping: 列名映射 {Excel列名: 模型属性名}:param batch_size: 批量插入大小:return: 成功导入的记录数"""if model_name not in self.model_classes:raise ValueError(f"未定义的模型名称: {model_name}")model_class = self.model_classes[model_name]session = self.Session()records_imported = 0try:# 1. 读取Excel文件logger.info(f"开始读取Excel文件: {excel_path}")df = pd.read_excel(excel_path)df = self._clean_dataframe(df)# 2. 准备列名映射if column_mapping is None:column_mapping = {col: col for col in df.columns}# 3. 验证列名model_columns = {column.name for column in model_class.__table__.columns if column.name != 'id'}missing_columns = model_columns - set(column_mapping.values())if missing_columns:logger.warning(f"模型需要但Excel中缺少的列: {missing_columns}")# 4. 准备批量插入数据objects = []for _, row in df.iterrows():data = {model_col: row.get(excel_col)for excel_col, model_col in column_mapping.items()if model_col in model_columns}objects.append(model_class(**data))# 批量提交if len(objects) >= batch_size:session.bulk_save_objects(objects)records_imported += len(objects)objects = []logger.info(f"已导入 {records_imported} 条记录...")# 提交剩余记录if objects:session.bulk_save_objects(objects)records_imported += len(objects)session.commit()logger.info(f"成功导入 {records_imported} 条记录到 {model_name} 表")return records_importedexcept Exception as e:session.rollback()logger.error(f"导入数据失败: {str(e)}")raisefinally:session.close()# 示例用法
if __name__ == '__main__':# 1. 定义你的模型类 (可以放在单独的文件中)class Talent(Base):__tablename__ = 'talent_person'id = Column(Integer, primary_key=True, autoincrement=True, unique=True)name = Column(String(255), nullable=False, comment='姓名')workplace = Column(String(255), comment='工作单位')# 其他字段...class Enterprise(Base):__tablename__ = 'enterprise'enterprise_id = Column(Integer, primary_key=True, autoincrement=True)supplier_name = Column(String(255), nullable=False)# 其他字段...# 2. 配置导入器current_dir = os.path.dirname(os.path.abspath(__file__))db_path = os.path.join(current_dir, 'person_enterprise.db')importer = DatabaseImporter(db_url=f'sqlite:///{db_path}',model_classes={'talent': Talent,'enterprise': Enterprise# 添加更多模型...})# 3. 初始化数据库importer.initialize_database()# 4. 导入Excel数据try:# 导入人才数据importer.import_from_excel(excel_path=r"C:\Users\lenovo\Desktop\.xlsx",model_name='talent',column_mapping={'姓名': 'name','工作单位': 'workplace',# 其他列映射...})# 可以继续导入其他Excel文件到不同表# importer.import_from_excel(...)except Exception as e:logger.error(f"导入过程出错: {str(e)}")

三、注释

@staticmethod 是 Python 中的一个装饰器,用于定义静态方法。
属于类而非实例的方法,不需要访问实例属性 (self) 或类属性 (cls),本质上是一个放在类命名空间内的普通函数。

http://www.dtcms.com/wzjs/599768.html

相关文章:

  • 宁波正规网站seo公司能自己做效果图的网站
  • 网站定制要求无锡名气大的网页设计
  • 城乡建设部网站造价工程师查询国际新闻最新消息今天新闻大
  • 国外做鞋子的网站吗app定制软件开发
  • 安庆哪里做网站设计类专业哪个好
  • 做网站后台开发工资临沂网站建设兼职
  • 网站标题psd推广文案撰写
  • 网站推广基本方法优酷有wordpress插件吗
  • 网站上海备案淮安市专用汽车制造有限公司网页设计
  • 做线路板的去哪个网站找工作西安网站建设聚星互联
  • 通辽网站建设招聘石家庄网站建设教程
  • 网站开发技术期末考试 及答案wordpress 主机伪静态404.php seo
  • 自己怎么在网上做网站丹东做网站公司
  • 做盗版频网站吉大建设工程学院官方网站
  • 临沂企业自助建站seo教程网站优化推广排名
  • 上海网站备案蓝盾信息做网站吗
  • 北京网站建设明细名片式网站模板
  • 搭建网站流程视频uniapp商城app整套源码
  • 做外贸仿牌网站超级网站建设
  • dw可以做移动端网站建设单位网站的重要性
  • 石狮服装城商家微网站建设天网网站建设
  • 浏阳商务局网站溪江农贸市场建设导航网站系统
  • 公司做网站的费用会计分录学网站建设需要什么软件有哪些
  • 网站建设规模用什么形容哪些网站可以做海报
  • 建设网站需要购买企业网站开发报价形式
  • 哪个网站可以接广告做wordpress视频解析
  • 深圳知名网站wordpress 自动保存
  • 如何做音乐分享类网站桂林做网站哪家公司好
  • 网站制作完成后应进入什么阶段软件开发平均工资
  • 上海市工程建设标准化信息网站礼物说wordpress