sesac-NoF / NoF

0 stars 0 forks source link

판례내용 본문양이 너무 김(DataError: (pymysql.err.DataError) (1406, “Data too long for column ‘판례내용’ at row 3) #16

Open jungssg opened 1 week ago

jungssg commented 1 week ago

데이터베이스에 판례본문 넣는 코드

실행시 sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, “Data too long for column ‘판례내용’ at row 3”) 에러발생

db로 저장

import pandas as pd import pymysql from sqlalchemy import create_engine, Table, Column, String, MetaData from sqlalchemy.dialects.mysql import LONGTEXT from db_info import user, password, host, port, database

user = user password = password host = host port = port database = database

CSV 파일 로드

df_injury = pd.read_csv('data/상해_본문2.csv') df_fraud = pd.read_csv('data/사기_본문2.csv') df_inheritance = pd.read_csv('data/상속_본문2.csv') df_labor = pd.read_csv('data/근로_본문2.csv')

MySQL 데이터베이스 연결 설정

engine = create_engine(f'mysql+pymysql://{user}:{password}@{host}:{port}/{database}', echo=False)

메타데이터 객체 생성

metadata = MetaData()

테이블을 삭제하고 다시 생성 (기존 테이블이 있을 경우 교체)

metadata.drop_all(engine) # 기존 테이블 삭제

상해본문 테이블 정의 (컬럼 타입을 명시적으로 설정)

injury_content_table = Table('injury_content', metadata, Column('판례정보일련번호', String(100)), Column('사건번호', String(100)), Column('선고', LONGTEXT), # LONGTEXT 타입으로 설정 Column('판결유형', String(100)), Column('판시사항', LONGTEXT), Column('판결요지', LONGTEXT), Column('참조조문', LONGTEXT), Column('참조판례', LONGTEXT), Column('판례내용', LONGTEXT) # 판례내용을 LONGTEXT로 설정 )

테이블을 데이터베이스에 생성

metadata.create_all(engine)

데이터프레임을 MySQL 테이블에 저장 (여기서는 미리 정의한 스키마 사용)

df_injury.to_sql(name='injury_content', con=engine, if_exists='replace', index=False)

연결 닫기

engine.dispose()

print("데이터베이스 저장 완료")

jungssg commented 6 days ago

pandas dataframe 에서 65536개 이상의 데이터 크기를 갖을때 dtype을 설정해주면 해결가능

https://stackoverflow.com/questions/56962051/pandas-dataframe-to-sql-with-data-longer-than-65536-characters

dtype = {
    '판례내용' : LONGTEXT,
    '판시사항': TEXT,
    '판결요지': TEXT,
    '참조조문': TEXT,
    '참조판례': TEXT,
}

df_injury.to_sql(name='injury_content', con=engine, if_exists='replace', index=False, dtype=dtype)