DataFrame to_sql使用错误的字符集替换

问题描述 投票:0回答:1

Panda的to_sql()与if_exists ='replace'为我的表设置了错误的字符集。为了将多个csv复制到mysql并忽略行上的错误(例如重复错误),我首先将csv读取为数据帧,然后将csv复制到临时表中,最后使用该临时表进行INSERT IGNORE来将数据导入正确的表。但是,当使用if_exists ='replace'将数据帧放入临时表时,它将字符集设置为latin1而不是utf8。由于数据包含中文字符,因此会导致错误。有没有办法确保表(和适当的列)使用的是UTF8?我也尝试在连接中指定字符集,但这不会阻止to_sql将表重新设置为latin1

相关代码:

import pandas as pd
from sqlalchemy import create_engine
import configparser

#load configuration
config = configparser.ConfigParser()
config.read('config-local.ini')

# construct database address
db_url = 'mysql+mysqlconnector://' + config['mysql']['user'] + ':' + config['mysql']['passwd'] + '@' + \
         config['mysql']['host'] + ':' + config['mysql']['port'] + \
         '/' + config['mysql']['database'] + '?charset=utf8'

engine = create_engine(db_url)
local_filename = 'some-file.csv'
df = pd.read_csv(local_filename, header=None, encoding='utf8')
try:
    # write to database
    df.to_sql('TempTable', con=engine, if_exists='replace', index=False)
except Exception as e:
    print(e)
python mysql pandas sqlalchemy
1个回答
0
投票

在数据库级别设置默认字符集和排序规则解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.