mysql报错:“DataError: (pymysql.err.DataError) (1406, "Data too long for column 'pwd' at row 1”

本文详细解析了在使用MySQL数据库时遇到的“Data too long for column”错误,阐述了错误发生的原因在于字段长度不足,并提供了调整字段长度的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql插入数据报错:“DataError: (pymysql.err.DataError) (1406, "Data too long for column ‘pwd’ at row 1”

报错详情:
在这里插入图片描述
数据model的定义:
在这里插入图片描述

报错原因:字段的长度不够存放数据

解决方案:就是更改pwd字段的max_length 的长度,即可解决问题

在这里插入图片描述

import requests import pandas as pd import csv import pymysql import time import json from tqdm import tqdm # ==================== # 1. 网页爬取模块 # ==================== def fetch_anime_data(max_records=100): """爬取Jikan v4 API数据""" base_url = "https://api.jikan.moe/v4/top/anime" all_data = [] page = 1 print("开始爬取数据...") with tqdm(total=max_records) as pbar: while len(all_data) < max_records: try: params = {'page': page, 'limit': 25} response = requests.get(base_url, params=params) # 处理速率限制 if response.status_code == 429: print("\n触发速率限制,等待2秒...") time.sleep(2) continue response.raise_for_status() data = response.json() # 解析数据结构 for anime in data['data']: if len(all_data) >= max_records: break # 提取核心字段 record = { 'mal_id': anime['mal_id'], 'title': anime['title'], 'title_japanese': anime.get('title_japanese', ''), 'type': anime['type'], 'episodes': anime['episodes'], 'status': anime['status'], 'score': anime['score'], 'rank': anime['rank'], 'genres': ','.join([g['name'] for g in anime['genres']]), 'studios': ','.join([s['name'] for s in anime['studios']]), 'year': anime['year'] or anime['aired']['prop']['from']['year'] } all_data.append(record) pbar.update(1) page += 1 time.sleep(0.3) # API速率限制 # 检查是否还有下一页 if not data['pagination']['has_next_page']: break except Exception as e: print(f"\n请求异常: {e}") break print(f"\n成功爬取 {len(all_data)} 条数据!") return pd.DataFrame(all_data[:1000]) # ==================== # 2. 数据存储模块 # ==================== def save_to_csv(df, filename): """保存数据到CSV文件""" try: # 解决中文编码问题[^5] df.to_csv(filename, index=False, encoding='utf-8-sig', quoting=csv.QUOTE_ALL) print(f"CSV文件保存成功: {filename}") except Exception as e: print(f"CSV保存失败: {e}") def save_to_mysql(df, table_name): """保存数据到MySQL数据库""" try: # 数据库配置(需替换为实际值) config = { 'host': 'localhost', 'user': 'root', 'password': '123456', 'database': 'tanqi17', 'charset': 'utf8mb4' # 支持中文和特殊字符[^5] } # 创建数据库连接 connection = pymysql.connect(**config) # 创建表(使用个人拼音简写作为表名) with connection.cursor() as cursor: # 删除旧表(如果存在) cursor.execute(f"DROP TABLE IF EXISTS {table_name}") # 创建新表 create_table_sql = f""" CREATE TABLE {table_name} ( mal_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL, title_japanese VARCHAR(255), type VARCHAR(50), episodes INT, status VARCHAR(50), score FLOAT, rank INT, genres TEXT, studios TEXT, year INT ) DEFAULT CHARSET=utf8mb4; """ cursor.execute(create_table_sql) # 插入数据 with connection.cursor() as cursor: for _, row in df.iterrows(): placeholders = ', '.join(['%s'] * len(row)) columns = ', '.join(row.index) sql = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})" cursor.execute(sql, tuple(row)) connection.commit() print(f"数据成功保存到MySQL: {table_name}") return True except Exception as e: print(f"数据库操作失败: {e}") return False finally: if connection: connection.close() # ==================== # 主程序 # ==================== if __name__ == "__main__": # 配置参数 CSV_FILENAME = "anime_data.csv" TABLE_NAME = "tanqi" # 替换为个人拼音简写 # 执行流程 df = fetch_anime_data(max_records=1000) save_to_csv(df, CSV_FILENAME) save_to_mysql(df, TABLE_NAME) # 打印样例数据 print("\n样例数据:") print(df.head(3).to_string(index=False))
最新发布
06-26
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值