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

python学习xlsx表格导入mysql脚本 + leetcode19删除链表倒N + python与本地mysql连接不上排错

1.xlsx表格导入mysql脚本


import pandas as pd
import os
import pymysql
from sqlalchemy import create_engine
import openpyxl# 数据库配置
DBHOST = "localhost"
DBUSER = "root"
DBPASS = "password"
DBNAME = "todoapp"# 创建数据库连接
engine = create_engine(f'mysql+pymysql://{DBUSER}:{DBPASS}@{DBHOST}/{DBNAME}')def read_excel_with_merged_cells(excel_file_path, sheet_name):"""读取包含合并单元格的Excel文件,并处理合并单元格"""wb = openpyxl.load_workbook(excel_file_path, data_only=True)ws = wb[sheet_name]merged_values = {}# 记录所有合并单元格的值for merged_range in ws.merged_cells.ranges:min_col, min_row, max_col, max_row = merged_range.bounds# 获取合并单元格的原始值(左上角)top_left_cell = ws.cell(row=min_row, column=min_col)value = top_left_cell.value# 将值记录到所有合并的单元格位置for row in range(min_row, max_row + 1):for col in range(min_col, max_col + 1):merged_values[(row, col)] = value# 解除合并单元格,防止后续读取时报错ws.merged_cells = set()# 构建 DataFrame 数据data = []for row in ws.iter_rows():new_row = []for cell in row:row_idx = cell.rowcol_idx = cell.columnvalue = merged_values.get((row_idx, col_idx), cell.value)new_row.append(value)data.append(new_row)# 第一行作为列名df = pd.DataFrame(data[1:], columns=data[0])return df
def clean_column_name(col_name):"""清理列名,使其符合MySQL字段命名规则"""return col_name.replace(" ", "_").replace("-", "_").lower()def create_table_from_df(df, table_name, cursor):"""根据DataFrame创建MySQL表"""columns_sql = []for col in df.columns:dtype = df[col].dtypeif dtype == 'int64':sql_type = 'INT'elif dtype == 'float64':sql_type = 'FLOAT'elif dtype == 'datetime64[ns]':sql_type = 'DATETIME'else:sql_type = 'TEXT'# 清理列名,确保可以作为MySQL字段名clean_col = clean_column_name(col)columns_sql.append(f"`{clean_col}` {sql_type}")columns_sql = ",\n    ".join(columns_sql)create_table_sql = f"""CREATE TABLE IF NOT EXISTS `{table_name}` (id INT AUTO_INCREMENT PRIMARY KEY,{columns_sql},created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"""try:cursor.execute(create_table_sql)print(f"表 `{table_name}` 创建成功")except Exception as e:print(f"创建表 `{table_name}` 时出错: {e}")def import_data_to_mysql(data_dict):"""将多个sheet数据分别导入为MySQL中的多个表"""try:with engine.connect() as conn:cursor = conn.connection.cursor()for sheet_name, df in data_dict.items():# 清理sheet名称,确保可以作为表名table_name = clean_column_name(sheet_name)print(f"正在处理sheet: {sheet_name} → 表名: {table_name}")# 创建表create_table_from_df(df, table_name, cursor)# 清理DataFrame列名,使其符合MySQL字段命名规则df.columns = [clean_column_name(col) for col in df.columns]# 插入数据df.to_sql(table_name, con=engine, if_exists='append', index=False)print(f"表 `{table_name}` 已成功插入 {len(df)} 条记录")conn.connection.commit()print("所有数据已成功导入到MySQL")return Trueexcept Exception as e:print(f"导入数据时出错: {e}")return Falseif __name__ == "__main__":# 获取当前文件所在目录current_dir = os.path.dirname(os.path.abspath(__file__))print(f"当前目录: {current_dir}")# 假设Excel文件在同一目录下excel_file_path = os.path.join(current_dir, "test.xlsx")# 读取Excel文件中的所有表格data_dict = {}wb = openpyxl.load_workbook(excel_file_path)for sheet_name in wb.sheetnames:df = read_excel_with_merged_cells(excel_file_path, sheet_name)data_dict[sheet_name] = dfif data_dict:# 导入数据到MySQLsuccess = import_data_to_mysql(data_dict)if success:print("所有操作完成!")else:print("导入过程中出现错误,请检查日志。")else:print("没有读取到任何有效的表格数据。")

 这里只是作为参考,改下mysql表和xlsx文件,结合结合着即可

2.  leetcode19删除链表

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {int count = 0;ListNode current = head;while(current != null){count++;current = current.next;}if(n==count){return head.next;}int a = count -n -1 ;int count2 =0;ListNode current2 = head;// if(count2 != a){//     count2++;//     current2 = current2.next;// }// if(count2 == a){//     current2 = current2.next.next;//     count2++;// }for(int i = 0; i< a;i++){current2 = current2.next;}//还有关于,指针相关的,current2指向了链表的后面的节点,head指向头节点//current = current2.next.next是错误的,没有达到删除的效果current2.next = current2.next.next;
return head;}}

这里看了看 链表排序,归并排序->分治算法,这个排序算法晚上回去看看

3.python与本地mysql连接不上排错(mysql.connector不行,pymysql可以)排查了一天,不知道是不是本机windows和linux不一样

就是没注释的代码可以,注释的连接不上

import pymysqlDBHOST = "localhost"
DBUSER = "root"
DBPASS = "password"
DBNAME = "todoapp"try:conn = pymysql.connect(host=DBHOST,user=DBUSER,password=DBPASS,database=DBNAME)print("数据库成功连接")
except pymysql.Error as e:print("数据库连接失败:", e)# //上面的代码可以连接数据库,下面的连接不上# import mysql.connector
#
# config = {
#     'host': 'localhost',
#     'user': 'root',
#     'password': 'password'
# }
#
# try:
#     conn = mysql.connector.connect(**config)
#     print("连接成功!")
#     conn.close()
# except Exception as e:
#     print(f"连接失败: {e}")

http://www.dtcms.com/a/295341.html

相关文章:

  • 每日算法-两数之和
  • Go基础教程 从零到英雄:30分钟掌握Go语言核心精髓
  • Leetcode—1035. 不相交的线【中等】
  • 独家|百度副总裁尚国斌即将离职,此前统筹百度地图;行业搜索及智能体业务总经理谢天转岗IDG
  • MongoDB 和 Elasticsearch(ES)区别
  • 项目重新发布更新缓存问题,Nginx清除缓存更新网页
  • MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?
  • Node.js 版本兼容问题:minimatch@10.0.3和minio@7.0.28 冲突的解决
  • Node.js 全局对象
  • Ubuntu-安装Asyn教程
  • 造成服务器内存不足的原因有什么
  • Node.js 中的内置模板path
  • Node.js特训专栏-实战进阶:18.密码加密与安全传输
  • node.js中的fs与path模块
  • 04.建造者模式的终极手册:从快餐定制到航天飞船的组装哲学
  • React+threejs两种3D多场景渲染方案
  • STM32 HAL库 HAL_TIM_OC_Stop函数详细解释
  • 期待更好的发展
  • 文件管理困境如何破?ZFile+cpolar打造随身云盘新体验
  • 亲测有效:EPLAN导出CAD图纸,DWG文件里的图纸复制粘贴出错和无法编辑的解决方法
  • EIDE 创建基于STM32-HD的项目快速创建流程
  • 精通Python PDF裁剪:从入门到专业的三重境界
  • 回调后门 函数
  • 微信格式插件 建的文件位置
  • 边缘智能体:轻量化部署与离线运行
  • MIT线性代数02_矩阵消元
  • C语言实现BIOS定义的WMI调用
  • NumPy 线性代数
  • 分布式推客系统开发全解:微服务拆分、佣金结算与风控设计
  • Sklearn 机器学习 数值标准化