gpt4 book ai didi

python - 将大型 csv 插入 MySQL,忽略带有未知字符的行

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:20 25 4
gpt4 key购买 nike

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

LOAD DATA LOCAL INFILE 'file.csv'...

但是,我不断收到以下错误:

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

在搜索该行的 .csv 后,我意识到错误是由这个字符引起的:😜;尽管我确定在我修复此问题后会有其他角色抛出该错误。

运行:

$ file --mime file.csv

从终端返回:

$ file.csv: text/html; charset=us-ascii

因为我的数据库的其余部分是 UTF-8,我尝试编写一个 python 脚本来重新编码它,使用 .encode('utf-8', 'ignore') 希望“忽略”会删除任何给它带来麻烦的符号,但它会抛出:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 825410: invalid continuation byte

问题是,我实际上并不关心将 100% 的文件插入我的数据库。我宁愿只插入不包含奇怪字符的“安全”行。

理想情况下,我正在寻找一种方法来修改我的 LOAD DATA LOCAL INFILE sql 语句,这样它就可以跳过插入任何给它带来麻烦的行。这是最佳的,因为我不想花时间预处理数据。

如果那不可行,下一个最好的办法是使用 Python 脚本删除任何有问题的字符/行,我以后可以在更新数据库时从我的 django 应用程序运行该脚本。

如果所有其他方法都失败了,关于如何 grep 出任何我可以编写 shell 脚本的非 UTF-8 友好字符的信息将很有用。

最佳答案

对于 😜,MySQL 必须在您要存储它的列上使用 CHARACTER SET utf8mb4LOAD DATA,以及连接。

更多 Python 注释:http://mysql.rjweb.org/doc.php/charcoll#python

E9 没有意义。 😜 的 UTF-8 编码的十六进制是 F09F989C

字符之间转换的链接是无关紧要的; Emoji 只能使用 UTF-8。

关于python - 将大型 csv 插入 MySQL,忽略带有未知字符的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44822480/

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