当前位置: 首页 > 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.lryc.cn/news/598699.html

相关文章:

  • 游戏开发Unity/ ShaderLab学习路径
  • rust-数据结构
  • 20250724-day21
  • Qt 调用ocx的详细步骤
  • 解决 SQL 错误 [1055]:深入理解 only_full_group_by 模式下的查询规范
  • R study notes[1]
  • 完成多项问题修复,MaxKB开源企业级智能体平台v1.10.9 LTS版本发布
  • C++图论全面解析:从基础概念到算法实践
  • 学习游戏制作记录(技能系统)7.24
  • Oracle国产化替代:一线DBA的技术决策突围战
  • 【ROS1】09-ROS通信机制——参数服务器
  • ubuntu25.04+4070+cuda+docker安装
  • prometheus监控k8s的metric详解-01-apiserver部分-05-其他
  • k8s把某个secret挂在某命名空间下
  • 【数据结构】二叉树进阶算法题
  • MongoDB常用场景
  • AI总结视频以及谷歌浏览器插件安装步骤
  • 对examples/train_lora/llama3_lora_eval.yaml模型评估配置文件的理解。
  • Vue2文件上传相关
  • 零知识证明
  • vs2019 创建MFC ActiveX的详细步骤
  • Qt WebEngine Widgets的使用
  • 爬虫基础概念
  • 在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序
  • linux C -glib库的基本使用
  • Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例
  • 如何在 Ubuntu 24.04 服务器或桌面版上安装和使用 gedit
  • 深度分析Java内存回收机制
  • 跨境支付入门~国际支付结算(电商篇)
  • unordered_map和unordered_set特性以及解决哈希冲突