当前位置: 首页 > 知识库问答 >
问题:

Python MySQLdb文件加载截断行,当从另一个mysql客户端加载文件时工作良好

江智
2023-03-14

在使用Python MySQLdb模块执行csv导入时,数据丢失。疯狂的事情是,我可以使用其他MySQL客户端加载完全相同的csv,而且它工作得很好。

    null

它截断了我7019行CSV的10行。

我正在调用的命令:load DATA LOCAL INFILE'/path/to/load.txt'REPLACE INTO TABLE tble_name FIELDS终止为“,”

当使用linux上的本机mysql客户机或mac上的sequel pro mysql客户机运行上述命令时,它运行得很好,我可以导入7019行。

dest_cursor.execute( '''LOAD DATA LOCAL INFILE '/path/to/load.txt' REPLACE INTO TABLE tble_name FIELDS TERMINATED BY ","''' )
dest_db.commit()

当警告弹出时,它在行 处声明 ,但我没有看到与csv中的行相关的内容(我认为是它试图在目标表上创建的行,而不是csv中的行),所以我不能使用它来帮助排除故障。

果然,当它完成时,我的目标表缺少了一些行。

不幸的是,由于csv中有7000多行,很难准确地说出它阻塞的是哪一行以供进一步分析。当警告弹出时,它在行 处声明,但我没有看到与csv中的行相关的内容(我认为是它试图在目标表上创建的行,而不是csv中的行),所以我不能使用它来帮助排除故障。

我可以使用其他MySQL客户端导入整个csv这一事实让我觉得MySQLdb模块配置不对或其他什么的。

这是Python2.7,感谢您的帮助。任何关于如何获得更好的可见性的想法都是有帮助的。


共有1个答案

谢嘉
2023-03-14

为了进一步的帮助,我想问你以下的问题。

  • 在使用三种方法中的任何一种导入后,在每次运行后运行该方法是否有任何结果?选择@@global.sql_warnings;(如果是这样,则会显示错误,因为它可能是静默失败。)
  • 您的SQL_MODE是什么?选择@@global.sql_mode;
  • 检查文件并确保您有偶数个作为一个。
  • 检查数据中是否有额外的或任何可能在Bash/Python/MySQL翻译中被捕获的东西
  • 您能提供丢失的第一行的数据吗?
  • 您能提供您正在使用的确切脚本吗?
  • 您说您正在使用Python 2.7
  • 什么版本的mysql客户端?选择@@global.version;
  • 什么版本的mysqldb?
  • 你在处理国际化问题吗?
  • 什么是数据库/架构排序规则?

查询:

SELECT DISTINCT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM INFORMATION_SCHEMA.SCHEMATA

WHERE (
SCHEMA_NAME <> 'sys' AND
SCHEMA_NAME <> 'mysql' AND
SCHEMA_NAME <> 'information_schema' AND
SCHEMA_NAME <> '.mysqlworkbench' AND
SCHEMA_NAME <> 'performance_schema'
);
  • 什么是表排序规则?

查询:

SELECT DISTINCT ENGINE, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES
WHERE (
TABLE_SCHEMA <> 'sys' AND
TABLE_SCHEMA <> 'mysql' AND
TABLE_SCHEMA <> 'information_schema' AND
TABLE_SCHEMA <> '.mysqlworkbench' AND
TABLE_SCHEMA <> 'performance_schema'
);
  • 什么是列排序规则?
SELECT DISTINCT CHARACTER_SET_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE (
TABLE_SCHEMA <> 'sys' AND
TABLE_SCHEMA <> 'mysql' AND
TABLE_SCHEMA <> 'information_schema' AND
TABLE_SCHEMA <> '.mysqlworkbench' AND
TABLE_SCHEMA <> 'performance_schema'
);
    null
SHOW VARIABLES 
WHERE VARIABLE_NAME LIKE 'CHARACTER\_SET\_%' OR 
VARIABLE_NAME LIKE 'COLLATION%';

如果前两种方法没有错误,那么我倾向于:

我不排除以下任何一个问题:

>

  • 周围可能存在的python连接配置问题

      null

    数据库排序规则未设置为处理外语

    超过最大值(字段值)

    隐藏字符或unicode字符

    请更新您的问题,当您有更多的信息,我会做同样的我的回答,以帮助您解决您的错误。

    希望这对你有帮助,一切顺利!

    您的错误

    Warning: (1265L, "Data truncated for column
    

    使我相信这是双引号在您的“字段终止”检查周围,以确保您的数据在错误的字段中没有逗号。这将导致您的数据在运行命令行时发生移动。因为gui是“足够聪明的”来处理这个问题。但是命令行是文字的!

  •  类似资料:
    • 问题 在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改。 办法 可以使用静态Jsoup.parse(File in, String charsetName, String baseUri) 方法: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http

    • 问题内容: 有时,我必须重新导入项目的数据,从而将大约360万行读入MySQL表(当前为InnoDB,但实际上我并不局限于此引擎)。事实证明,“加载数据infile …”是最快的解决方案,但它有一个折衷:-当不使用密钥导入时,导入本身需要大约45秒,但是密钥创建需要一定的时间(已经运行了20分钟。)。 )。-使用表上的键进行导入会大大降低导入速度 在表的3个字段上有键,引用了数字字段。有什么办法可

    • 我有两个jar文件。第一个只包含接口 在请求的基础上,我试图从中加载我的实现类。jar文件存在于某个文件夹中,在运行时使用URLClassLoader。 课程正在加载 我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。 同样的代码可以在正常的J2SE环境中工作,但不能在JBoss环境中工作。 如果我的查询不清楚,请让我知道我也可以粘贴源代码。

    • 下面的代码是在pyspark shell中运行时的工作文件,但在spark submit master Thread中执行时失败。 我在这里怎么了? 错误:

    • 好的,基本上,我尝试使用这里描述的方法JarFileLoader来加载一个jar,其中包含一个类,该类的使用方式与类路径上的相同(类名将是动态的,因此我们可以添加任何jar任何类和程序将通过解析文本文件加载它,在主线中)。 问题是当我调试和检查URLClassLoader对象时 行: getResource()在参数中找不到类名。 有人已经尝试过用这种方式加载jar文件了吗? 谢谢。 加载器: 主

    • 我在使用Java和FXML文件时遇到了一个问题。 现在我找了好几个小时,找不到任何解决我问题的东西,所以我最后的希望是针对我的具体情况提出问题(我知道像这个问题和其他问题,但没有一个真正帮助我在这方面。 简单说明:我有一个Eclipse Java项目,我的类(对于这个问题很重要)在包[Project Name]/src/measurements.gui中。我的FXML文件在[Project Nam