我有一个通过read_csv加载的pandas数据帧,当我尝试时,我试图通过to_sql将数据库推送到数据库
df.to_sql("assessmentinfo_pivot", util.ENGINE)
我找回了unicodeDecodeError:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 83-84: ordinal not in range(128)
to_sql没有编码选项为to_sql指定utf-8,而创建的Engine的编码设置为utf-8
ENGINE = create_engine("mssql+pymssql://" +
config.get_local('CEDS_USERNAME') + ':' +
config.get_local('CEDS_PASSWORD') + '@' +
config.get_local('CEDS_SERVER') + '/' +
config.get_local('CEDS_DATABASE'),
encoding="utf-8")
任何大熊猫都能深入了解这项工作吗?我搜索的大部分内容都引导我找到to_csv类似错误的人,这只是通过添加encoding =“utf-8”来解决,但遗憾的是这不是一个选项。
我尝试将文件缩小,但即使只删除标题,它仍然会出错:http://pastebin.com/F362xGyP
答案 0 :(得分:1)
我在python 3.7上遇到了类似的问题: UnicodeEncodeError:'charmap'编解码器无法在位置0编码字符'\ ufffd':字符映射到
这就是我定义引擎的方式。我在引擎中将字符集定义为utf-8,但没有找到它:
# Connecting to the database(reference for checkout_listener not added)
def MysqlConnection(DbName):
DB_TYPE = 'mysql'
DB_DRIVER = 'mysqldb'
DB_NAME = DbName
POOL_SIZE = 100
CHARSET = 'utf-8'
SQLALCHEMY_DATABASE_URI = '%s+%s://%s:%s@%s:%s/%s?%s' % (DB_TYPE, DB_DRIVER, DB_USER,
DB_PASS, DB_HOST, DB_PORT, DB_NAME, CHARSET)
ENGINE1 = create_engine(
SQLALCHEMY_DATABASE_URI, pool_size=POOL_SIZE, pool_recycle=3600, echo=False)
event.listen(ENGINE1, 'checkout', checkout_listener)
return (ENGINE1);
这在python 2上工作正常,但在python 3上,会发生charmap错误。我发现的唯一解决方案是以不同的方式编写引擎,并将charset添加到定义字符串:
connection_string = f"{mysql_user}:{mysql_password}@localhost:3306/{db_name}?charset=utf8"
engine = create_engine(f'mysql://{connection_string}')
答案 1 :(得分:0)
我已经解决了更改MySQL数据库(UTF-8)中的字符集并将其添加到pymysql连接的问题:static List<MandantLinkCheckerEntry> createMandantLinkCheckerEntries(Struct struct) {
Map<String, Map<String, Object>> linkCheckerMandants = struct.toNestedMaps();
return linkCheckerMandants.values().parallelStream()
.map(MandantLinkCheckerEntry::convertMapToMandantCheckerEntry)
.collect(Collectors.toList());
}
。