• 在读取xlsx文件写入数据库的时候发现了这种问题


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 m0_69693998 2024-06-25 13:34 采纳率: 60% 浏览 2 首页/ 编程语言 / 在读取xlsx文件写入数据库的时候发现了这种问题 pythonmysql数据库 在读取xlsx文件写入数据库的时候发现了这种问题,这个需要怎么解决呢 import pymysql import xlrd """ 一、连接mysql数据库 """ # 打开数据库连接 conn = pymysql.connect( host='', user='', password='', charset='utf8', port=3306, db='', ) # 使用cursor()方法获取操作游标 c = conn.cursor() """ 二、读取excel文件 """ FilePath = 'E:/Pc_class_work/class_work/FlaskpiProject/Game_List.xlsx' # 1.打开excel文件 wkb = xlrd.open_workbook(FilePath) # 2.获取sheet sheet = wkb.sheet_by_index(0) # 获取第一个sheet表['学生信息'] # 3.获取总行数 rows_number = sheet.nrows # 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[] cap = [] for i in range(rows_number): x = sheet.row_values(i) # 获取第i行的值(从0开始算起) cap.append(x) print(cap) # [['9022478', '郭赛', '男', 34.0, 'CS'], ['9022472', '林伟', '男', 36.0, 'MA'], ···] """ 三、将读取到的数据批量插入数据库 """ for Stu in cap: Game_Name = Stu[0] Game_UID = Stu[1] Game_Type = Stu[2] icon = Stu[3] # 使用f-string格式化字符串,对sql进行赋值 c.execute(f"insert into game_list123456(Game_Name,Game_UID,Game_Type,icon) value ('{Game_Name}','{Game_UID}','{Game_Type}','{icon}')") conn.commit() conn.close() print("插入数据完成!") 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 阿里嘎多学长 2024-06-25 13:35
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      根据你提供的错误信息,问题出在 SQL 插入语句的语法上。错误提示表明在 SQL 语句的某个部分存在语法错误,具体是在字符串 '0's Bounty' 附近。这通常是因为 SQL 语句中的字符串值没有被正确的引号包围,或者字符串值中包含了特殊字符,如单引号,导致 SQL 语句无法正确解析。

      在你的 SQL 插入语句中,问题可能是由于 icon 字段的值可能包含单引号或特殊字符。为了解决这个问题,你可以采取以下步骤:

      1. 确保所有字符串值都用单引号包围:SQL 语句中的字符串值应该用单引号 ' 包围,而不是双引号 "。由于你的代码中使用了 f-string,这应该不会是问题,但需要确保 icon 字段的值没有包含单引号。

      2. 转义字符串中的单引号:如果 icon 字段的值中确实包含了单引号,你需要在 SQL 语句中转义这些单引号。在 Python 中,你可以使用 .replace("'", "\\'") 来转义单引号。

      3. 检查字段名和表名是否正确:确保 game_list123456 是正确的表名,Game_NameGame_UIDGame_Typeicon 是正确的字段名,并且它们在数据库中已经定义。

      4. 使用参数化查询:为了提高安全性和避免 SQL 注入,建议使用参数化查询。这可以通过将 SQL 语句和参数分开来实现。

      修改后的代码示例如下:

      for Stu in cap:
          Game_Name = Stu[0].replace("'", "\\'")
          Game_UID = Stu[1].replace("'", "\\'")
          Game_Type = Stu[2].replace("'", "\\'")
          icon = Stu[3].replace("'", "\\'")
      
          # 使用参数化查询
          c.execute("insert into game_list123456(Game_Name, Game_UID, Game_Type, icon) values (%s, %s, %s, %s)",
                    (Game_Name, Game_UID, Game_Type, icon))
      conn.commit()
      

      请注意,我在这里使用了 %s 作为参数的占位符,并在 execute 函数的第二个参数中提供了一个包含所有参数的元组。这样可以避免直接将变量插入到 SQL 语句中,从而减少语法错误和 SQL 注入的风险。

      最后,如果你需要进一步的帮助或参考链接,我可以提供一些资源,但请注意,我无法直接提供链接。你可以搜索关于 "SQL 参数化查询"、"Python pymysql 参数化查询" 或 "SQL 语法错误解决方法" 来获取更多信息。

      展开全部

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-25 13:35
      关注

      引自免费微信小程序:皆我百晓生

      这个问题是由于你在尝试将Excel文件中的数据导入到MySQL数据库时遇到了错误。首先,你需要确保你的Excel文件中的数据格式与MySQL数据库的字段类型匹配。其次,你需要处理Excel文件中可能存在的缺失值。

      下面是修复此问题的一些建议步骤:

      1. 检查Excel文件中的数据格式:确认每个单元格中的数据格式是否符合MySQL数据库的字段类型要求。
      2. 处理Excel文件中的缺失值:如果你的Excel文件中包含缺失值(例如,“?”),你需要将其替换为适当的值(例如,NULL)以便于数据的正确插入。
      3. 使用正确的SQL语句:在你的for循环中,你应该使用正确的SQL语句来将数据插入到数据库中。确保你正在正确地拼接字符串并执行SQL查询。
      4. 清理数据库:删除任何不必要的记录,这有助于提高数据的质量和完整性。
      5. 验证数据:检查数据库中是否存在重复的记录,以及数据是否按照预期被正确地存储。

      下面是一个示例代码片段,用于验证数据是否按照预期被正确地存储:

      import pymysql
      import pandas as pd
      from pandas import DataFrame
      
      # 假设我们有一个名为'data.xlsx'的Excel文件
      df = pd.read_excel('data.xlsx')
      
      # 连接到数据库
      conn = pymysql.connect(host='localhost',
                             user='root',
                             password='password',
                             database='mydb',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
      
      try:
          with conn.cursor() as cur:
              for index, row in df.iterrows():
                  sql = f"INSERT INTO my_table (column1, column2, column3) VALUES (%s, %s, %s)"
                  val = (row['column1'], row['column2'], row['column3'])
                  cur.execute(sql, val)
      except Exception as e:
          print(e)
      finally:
          conn.close()
      

      这段代码将从Excel文件中提取数据并将其插入到MySQL数据库中。请注意,你需要根据实际情况修改host, user, password, database, 和column1, column2, column3等变量。

      另外,为了更好地理解这个过程,你可以考虑使用一些工具来可视化数据,比如线框图,它可以清晰地展示出数据之间的关系。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Transformer13~目标检测算法汇总
    51单片机ROM和RAM
    Zotero(2)---使用Sci-hub插件下载文献
    python--数据容器--列表
    Arm32进行远程调试
    23面向对象案例1
    RabbitMQ开启MQTT协议支持
    【Android】NDK开发Crash分析
    Linux 安装 git
    【Java】Java 代码注释是代码逻辑的灵魂
  • 原文地址:https://ask.csdn.net/questions/8123760