Python 将大型csv插入MySQL,忽略包含未知字符的行

Python 将大型csv插入MySQL,忽略包含未知字符的行,python,mysql,django,csv,character-encoding,Python,Mysql,Django,Csv,Character Encoding,我有一个大的.csv文件,我正试图将它导入到Django项目的MySQL数据库中。我正在使用django.db库编写原始sql语句,例如: LOAD DATA LOCAL INFILE 'file.csv'... 但是,我不断遇到以下错误: django.db.utils.OperationalError: (1300, "Hey! Are you out tonight?") 将.csv灰显为行后,我意识到错误是由以下字符引起的:不100%确定这是否有帮助,但我会尝试这样做: 由于open

我有一个大的.csv文件,我正试图将它导入到Django项目的MySQL数据库中。我正在使用django.db库编写原始sql语句,例如:

LOAD DATA LOCAL INFILE 'file.csv'...
但是,我不断遇到以下错误:

django.db.utils.OperationalError: (1300, "Hey! Are you out tonight?")

将.csv灰显为行后,我意识到错误是由以下字符引起的:不100%确定这是否有帮助,但我会尝试这样做:

由于open()用于打开CSV文件进行读取,因此默认情况下,该文件将使用系统默认编码解码为unicode(请参阅locale.getpreferredencoding()。要使用不同的编码对文件进行解码,请使用open的encoding参数:

这是我们收集的一个例子。请记住,您可能需要用实际的文件编码替换
utf-8
,如文档所述。然后,您可以继续使用python将数据推送到DB中,或者使用新的编码编写新文件


或者,.

不能100%确定这是否有帮助,但我会尝试以下方法:

由于open()用于打开CSV文件进行读取,因此默认情况下,该文件将使用系统默认编码解码为unicode(请参阅locale.getpreferredencoding()。要使用不同的编码对文件进行解码,请使用open的encoding参数:

这是我们收集的一个例子。请记住,您可能需要用实际的文件编码替换
utf-8
,如文档所述。然后,您可以继续使用python将数据推送到DB中,或者使用新的编码编写新文件


或者,.

对于
对于
您是否尝试过csv内置库-?您能否详细介绍一下csv内置库的帮助?它是否有指定字符集或清除数据的方法?作为答案添加您是否尝试了csv内置库-?您能否详细说明csv内置库将如何提供帮助?它有指定字符集或清除数据的方法吗?作为回答添加,谢谢链接。信息量很大,而且你显然很有知识。为了澄清您的第一句话,我正在将csv加载到表内容字符集utf8mb4中,
LOAD DATA LOCAL infle file.csv IGNORE…
,我相信这涵盖了第一部分和第二部分。然后my settings.py为数据库部分提供以下内容:
“引擎”:“django.db.backends.mysql”,…'选项“:{'charset':'utf8mb4','use_unicode':True,}
,我相信它可以处理您所说的连接部分。这是对的,还是我应该做些别的事?呵呵,我在假装。我从未用Python编写过代码。这个链接汇集了Python和大约35种其他语言中字符问题的明显解决方案,其中大部分我都没有涉及。所以,我不能真正回答你的最后一个问题;让我们知道它是否有效。(如果您在该链接中发现错误,请告诉我;我会更新它。)哈哈,很好。跟随你博客的Django部分让我走得更远,但不幸的是,它后来在csv中的一些汉字上失败了。最后,我将我的
LOAD DATA
语句更改为将拉丁语1用于字符集。我相信这会回来咬我,但它的工作,使整个csv到我的数据库。我不知道为什么latin1会在utf8mb4没有的情况下工作。latin1接受所有8位值。utf8mb4检查有效性。拉丁语1在遇到诸如
CHAR\u LENGTH()
、字符串比较、
ORDER BY
等问题时会咬到你,因为它看不到正确的文本。不可否认,它可能不会咬人。哇,谢谢你的链接。信息量很大,而且你显然很有知识。为了澄清您的第一句话,我正在将csv加载到表内容字符集utf8mb4中,
LOAD DATA LOCAL infle file.csv IGNORE…
,我相信这涵盖了第一部分和第二部分。然后my settings.py为数据库部分提供以下内容:
“引擎”:“django.db.backends.mysql”,…'选项“:{'charset':'utf8mb4','use_unicode':True,}
,我相信它可以处理您所说的连接部分。这是对的,还是我应该做些别的事?呵呵,我在假装。我从未用Python编写过代码。这个链接汇集了Python和大约35种其他语言中字符问题的明显解决方案,其中大部分我都没有涉及。所以,我不能真正回答你的最后一个问题;让我们知道它是否有效。(如果您在该链接中发现错误,请告诉我;我会更新它。)哈哈,很好。跟随你博客的Django部分让我走得更远,但不幸的是,它后来在csv中的一些汉字上失败了。最后,我将我的
LOAD DATA
语句更改为将拉丁语1用于字符集。我相信这会回来咬我,但它的工作,使整个csv到我的数据库。我不知道为什么latin1会在utf8mb4没有的情况下工作。latin1接受所有8位值。utf8mb4检查有效性。拉丁语1在遇到诸如
CHAR\u LENGTH()
、字符串比较、
ORDER BY
等问题时会咬到你,因为它看不到正确的文本。诚然,它可能不会咬得很紧。
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)