在使用pythonmysqldb模块进行csv导入时,我会丢失数据。最疯狂的是,我可以用其他MySQL客户机加载完全相同的csv,而且效果很好。在
它从我的7019行csv中截取了大约10行。在
我要呼叫的命令是:
LOAD DATA LOCAL INFILE '/path/to/load.txt' REPLACE INTO TABLE tble_name FIELDS TERMINATED BY ","
当使用linux上的原生mysql客户机或mac上的sequel pro mysql客户机运行上述命令时,它可以正常工作,我得到7019行导入。在
当使用Python的MySQLdb模块运行上述命令时,例如:
dest_cursor.execute( '''LOAD DATA LOCAL INFILE '/path/to/load.txt' REPLACE INTO TABLE tble_name FIELDS TERMINATED BY ","''' )
dest_db.commit()
大多数行都是导入的,但我被抛出了大量
Warning: (1265L, "Data truncated for column '<various_column_names' at row <various_rows>")
当警告弹出时,它声明at row <row_num>
,但我看不到与csv中的行相关的内容(我认为是它试图在目标表上创建的行,而不是csv中的行),所以我不能用它来帮助解决问题。在
果然,完成后,我的目标表缺少一些行。在
不幸的是,csv中有7000多行,很难准确地判断出哪一行被阻塞,无法进行进一步的分析。当我无法在目标行中看到csv{3}的时候,我认为它不能帮助我在该行中创建csv}(但我认为它无法在该行中创建csv)。在
有许多行是空的和/或空的,但它们导入良好。在
事实上,我可以使用其他MySQL客户机导入整个csv,这让我觉得MySQLdb模块的配置不正确。在
这是python2.7 感谢任何帮助。任何关于如何更好地了解它被阻塞的线路的想法都会很有帮助。在
这是一个令人尴尬的问题,但也许我可以帮助将来犯下像我这样可怕错误的人。在
我花了很多时间分析字段、检查特殊字符等等,结果发现我只是自己造成了问题。在
我在csv中有空格,在load语句中没有使用强制的
ENCLOSED BY
。这意味着我在某些字段中添加了空格字符,从而导致溢出。所以数据看起来像value1, value2, value3
,而它应该是value1,value2,value3
。删除这些空格,在字段周围加引号,并在我的语句中强制ENCLOSED BY
来解决这个问题。 我假设正在工作的客户机正在后台清理数据或其他东西。我真的不知道为什么它在其他地方使用相同的csv,但这让我通过了第一组障碍。在完成了这些之后,csv中的最后一行被阻塞了,它声明
Row doesn't contain data for all columns
-结果是我在创建文件之后在尝试加载它之前没有close()
。所以文件上有某种锁。一旦我添加了close()
语句并修复了间距问题,所有数据现在都在加载。很抱歉有人花了很多时间为我调查这个问题。在
为了进一步的帮助,我想问你以下问题。在
错误检查
SELECT @@GLOBAL.SQL_WARNINGS;
(如果是这样的话,应该会显示错误,因为它可能会自动失败。)SELECT @@GLOBAL.SQL_MODE;
"
。在"
或,
,或者bash/python/mysql的翻译中可能捕捉到的任何内容?在数据请求
版本
python 2.7
SELECT @@GLOBAL.VERSION;
国际化
查询:
查询:
^{pr2}$查询:
检查数据库
用于连接排序规则/字符集
如果前两种方法都能正常工作,那么我倾向于:
其他合理的担忧
我不排除以下任何问题:
可能存在的python连接配置问题
python/bash运行时插入符号,导致随机隐藏gem
数据库排序规则未设置为处理外语
超过最大值(字段值)
hidden or unicode characters
emoji processing
上面提到的数据有问题,有双引号、逗号,我忘了提到NewLines for ^{} or ^{} (Carriage return or NewLine)
总而言之,有很多东西要看,需要更多的信息来进一步帮助。在
当你有更多的信息时,请更新你的问题,我会为我的回答做同样的事情,以帮助你解决你的错误。在
希望这有帮助,一切顺利!在
更新:
你的错误
让我相信是
Double-Quote
围绕着你的“字段终止”检查,以确保你的数据在出错字段内没有逗号。这将导致您的数据在运行命令行时发生偏移。因为gui对每个say来说都“足够聪明”来处理这个问题。但是命令行是字面的!在相关问题 更多 >
编程相关推荐