gpt4 book ai didi

Python MySQL 批量插入字符编码错误

转载 作者:行者123 更新时间:2023-11-29 11:20:03 28 4
gpt4 key购买 nike

我使用 PythonMySQL 启动新项目。

我只是尝试通过MySQLdb包将数百万条记录从CSV插入到MySQL

我的代码:

 import pandas as pd 
import MySQLdb

#Connect with MySQL
db = MySQLdb.connect('localhost','root','****','MY_DB')
cur = db.cursor()

#Reading CSV
df = pd.read_csv('/home/shankar/LAB/Python/Rough/******.csv')

for i in df.COMPANY_NAME:
i = i.replace("'","")
i = i.replace("\\","")
#i = i.encode('latin-1', 'ignore')
cur.execute("INSERT INTO polls_company (name) VALUES ('" + i + "')")
db.commit()

此代码在某种 CSV 文件中运行良好,但在少数 CSV 文件中存在问题。

错误:

 ---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-7-aac849862588> in <module>()
13 i = i.replace("\\","")
14 #i = i.encode('latin-1', 'ignore')
---> 15 cur.execute("INSERT INTO polls_company (name) VALUES ('" + i + "')")
16 db.commit()

/home/shankar/.local/lib/python3.5/site-packages/MySQLdb/cursors.py in execute(self, query, args)
211
212 if isinstance(query, unicode):
--> 213 query = query.encode(db.unicode_literal.charset, 'surrogateescape')
214
215 res = None

UnicodeEncodeError: 'latin-1' codec can't encode character '\ufffd' in position 49: ordinal not in range(256)

这里,这个“字符编码”问题仅出现在某些 CSV 文件中,但我希望使用常见的编码技术自动插入。

因为 CSV 文件编码适用于“utf-8”、“latin-1”等...

如果我使用utf-8:那么我在latin-1中遇到错误反之亦然

那么,有没有什么办法可以操作各种通用编码的CSV文件

还有其他方法可以解决这个问题吗?

[提前致谢...]

最佳答案

我会让 pandas 负责编码,你不需要循环你的 DF。让我们用 pandas 的方式来做:

import pandas as pd 
import MySQLdb

#Connect with MySQL
db = MySQLdb.connect('localhost','root','****','MY_DB')
cur = db.cursor()

#Reading CSV
df = pd.read_csv('/home/shankar/LAB/Python/Rough/******.csv')

df.COMPANY_NAME.str.replace(r"['\]*", "").rename(columns={'COMPANY_NAME':'name'}).to_sql('polls_company', db, if_exists='append', index=False)

关于Python MySQL 批量插入字符编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com