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

python pandas dataFrame sqlAlchemy案例

python pandas、dataFrame

from sqlalchemy import create_engine,Engine,text,MetaData,Column,Table,Integer,String import pandas as pd #这是 导入 pandas 库并给它起了一个别名 pd。 from pandas import DataFrame from sqlalchemy.exc import OperationalError,ProgrammingError """ # 创建一次,全局共享(模拟 config 中的数据库配置) # mysql+pymysql://用户:密码@主机:端口/数据库名 """ engine: Engine = create_engine( "mysql+pymysql://root:root@127.0.0.1:3306/fastapi", pool_size=5, # 连接池大小 max_overflow=10, # 超出 pool_size 后最多再创建 10 个连接 pool_pre_ping=True, # 每次从池取连接前先 ping 一下,避免拿到断开的连接 echo=True, # 设为 True 可打印所有 SQL,方便调试 ) """ pandas 是 Python 最流行的数据处理库,专门用来处理表格型数据(类似 Excel 表格)。 as pd 是别名,之后用 pd 代替 pandas 写起来更短: DataFrame 是什么? DataFrame = 表格,可以理解为 Excel 中的一个 sheet 或数据库中的一张表。 id comment user_name like_count 1 张三的评论 张三 2 2 李四的评论 李四 5 3 王五的评论 王五 0 df.columns # 获取列名列表 df.to_dict() # 转为字典 df.to_sql() # 写入数据库 pd.read_sql() # 从数据库读取 df.head() # 看前几行 pandas.dataFrame.to_sql(table_name,engine,if_exists) # 写入数据库 table_name 目标数据库表名 字符串 engine SQLAlchemy 引擎 连接数据库的 engine 对象 if_exists 表已存在时的行为 "fail" / "replace" / "append" index 是否把 DataFrame 的行索引也写入数据库 True / False if_exists 三种模式: "fail" 表已存在 → 抛出异常 创建新表时用,表存在说明有冲突 "replace" 表已存在 → 删掉重建,再写入数据 覆盖全量数据 "append" 表已存在 → 追加数据 增量写入 三种取值完整说明 1. if_exists="fail"(默认值) 逻辑:如果数据表已存在,直接抛出异常 ValueError,不执行任何写入操作 适用场景:确认数据库不存在该表才写入,防止误覆盖旧数据 示例报错:ValueError: Table xxx already exists. 2. if_exists="replace" 逻辑:先删除原有整张表,重新创建空表,再写入当前 DataFrame 全部数据 特点: 原表结构、索引、约束全部清空重建 表结构完全由当前 df 的列名、数据类型决定 适用场景:全量更新,每次覆盖整张表数据 3. if_exists="append" 逻辑:保留原有表结构和历史数据,仅把当前 DataFrame 的数据追加到表末尾 强制要求(否则报错): DataFrame 列名、列数量必须和数据库现有表完全一致 数据类型尽量匹配,否则数据库会报类型错误 适用场景:增量写入、日志流水、每日新增数据入库 """ def run_demo(): """# 表的容器""" meta = MetaData() """# Table()包裹表结构""" table1 = Table( "t_department", meta, # 表名 + 所属表容器 Meta # 下面是字段定义 Column("id", Integer, primary_key=True,autoincrement=True), # 主键 Column("name", String(200), nullable=True), Column("department", String(200), nullable=True), Column("salary", Integer, nullable=True), ) meta.create_all(engine,tables=[table1]) """ #append 追加写入 # ---- 准备数据 ---- """ dataFrame = pd.DataFrame({ "name": ["Alice", "Bob", "Charlie"], "department": ["Engineering", "Sales", "Engineering"], "salary": [50000, 60000, 70000], }) """ #append 追加写入数据 #dataFrame.to_sql(name="t_department", con=engine, if_exists="append", index=False) #fail表存在则报错,抛出ValueError错误 # try: # dataFrame.to_sql(name="t_department", con=engine, if_exists="fail", index=False) # except ValueError as e: # #ValueError # print("表已存在,",type(e)) #ValueError """ """#replace模式 ,先drop t_department ,再见表, 字符串是text,数字是bigint , index=True会多生成一列index(bigint),但这个表没有主键""" dataFrame.to_sql(name="t_department", con=engine, if_exists="replace", index=False) """pandas读数据,非dataFrame读数据""" dataList =pd.read_sql("select * from t_department", con=engine) """返回值类型是DataFrame""" print(type(dataList)) """ dataFrame转python类型,支持3种 DataFrame.to_dict(prient = "records / list / dict") "records" [{列名: 值}, ...] 每条记录一个字典 [{"name": "Alice", ...}, {"name": "Bob", ...}] "list" {列名: [值列表]} 每列一个列表 {"name": ["Alice", "Bob"], "salary": [50000, 60000]} "dict"(默认) {列名: {行索引: 值}} {"name": {0: "Alice", 1: "Bob"}} 最常用的是 orient="records",直接得到一个列表,每个元素是一条记录的字典。 """ """ # 转为字典 #[{'name': 'Alice', 'department': 'Engineering', 'salary': 50000}, {'name': 'Bob', 'department': 'Sales', 'salary': 60000}, {'name': 'Charlie', 'department': 'Engineering', 'salary': 70000}] """ data_dict = dataList.to_dict(orient="records") print(data_dict) if __name__ == '__main__': run_demo()

http://www.jsqmd.com/news/1272209/

相关文章:

  • 【单片机毕业设计推荐】基于 STM32/51 单片机的 HX711 智能称重计价装置设计与实现,基于 STM32/51 单片机的 LCD1602 称重计价系统设计(021103)
  • Meta AI升级:日历集成与深度研究功能实战解析
  • Factory Missions:40天连续工作的AI智能体任务管理系统
  • HarmonyOS 实战教程(十):项目总结与扩展实践 —— 以「柚兔自测量表」为例
  • Horch:本地CLI工具如何解决会议信息提取与隐私保护难题
  • 电动汽车V2G技术:Matlab优化调度与电网互动实践
  • C++空指针解引用:从原理到防御性编程的实战指南
  • 2026多人会议音视频听记软件实测|精准区分说话人,会议纪要效率翻倍
  • AIGC工具在继续教育论文降重中的实战应用
  • APIJSON框架:自动化API与ORM一体化开发实践
  • 如何免费获得Windows透明任务栏:TranslucentTB完整使用指南
  • 金融大模型应用:技术落地与行业实践
  • HTTP请求方法详解:GET、POST、PUT、DELETE核心解析
  • C++内存管理:从malloc/free到智能指针与RAII的演进与实践
  • 2026 年 7 月新发布:滕州可靠的聚氨酯保温喷涂供货商推荐,冬天屋顶保暖,别再花冤枉钱了 - 企业推荐官【认证】
  • 碳约束下煤制氢系统优化:IGDT与CCUS技术实践
  • Linux文件描述符原理与高并发IO优化实践
  • CTF逆向工程实战:从IDA静态分析到Python脚本求解
  • 2026 年 7 月新发布:东营评价高的卫生间疏通定做厂家深度解析与优选指南,卫生间堵得快溢出才想起?原来这玩意儿不用花大价钱还能秒通 - 企业官方推荐【认证】
  • Vue3 Suspense组件原理与最佳实践
  • SWF逆向工程实战指南:JPEXS工具链配置与高效工作流
  • NLP论文降重工具链配置与高效降重方法
  • Python微博舆情分析系统:从数据采集到可视化实战
  • C语言顺序表实现与性能优化全解析
  • 文件包含漏洞实战:从LFI到蚁剑连接与disable_function绕过
  • 绵阳市防水补漏_2026川北科技城漏水维修市场行情与五大正规施工团队推荐 - 雨婺虹房屋维修
  • 从零详解Transformer:自注意力机制与PyTorch实战
  • 2026年PMP考试变革:敏捷与数字化趋势解析
  • 无人机路径规划中的CPO算法与Matlab实现
  • TMS320C54x DSP开发板硬件设计:从架构到调试的工程实践