生成表格模式,检查Excel(CSV)并导入数据

我将如何去创build一个检查Excel(或CSV)文件的MYSQL表模式。 有没有任何准备好的Python库的任务?

列标题将被清理为列名。 数据types将根据电子表格列的内容进行估算。 完成后,数据将被加载到表中。

我有一个〜200列的Excel文件,我想开始正常化。

使用xlrd模块; 从这里开始 [免责声明:我是作者]。 xlrd将单元格分类为文本,数字,date,布尔值,错误,空白和空白。 它通过检查与单元格相关的格式(例如“dd / mm / yyyy”与“0.00”)来区分date和数字。

编写一些代码来通过用户input的数据进行编程以确定每列所用的数据types是不是可以轻松实现自动化的工作。 你应该能够眼睛的数据和分配像整数,金钱,文本,date,date时间,时间等types,并编写代码来检查你的猜测。 请注意,您需要能够处理诸如在文本字段中input的数字或date数据(可以在GUI中查看)。 您需要一个策略来处理不符合“估计”数据types的单元格。 您需要validation和清理您的数据。 请确保您对文本string进行了规范化处理(剥去前导/尾随空格,用一个空格replace多个空格,Excel文本是(仅限于BMP)Unicode;不要打成ASCII或“ANSI” – 使用Unicode编码UTF-8把它放到你的数据库中。

与phpmyadmin快速和肮脏的解决方法:

  • 用适量的列创build一个表格。 确保数据符合列。
  • 将CSV导入到表格中。
  • 使用build议的表结构

据我所知,没有任何工具可以使这个过程自动化(我喜欢有人certificate我错了,因为我以前有过这个确切的问题)。 当我这样做时,我想出了两个select:
(1)用适当的types手动创build数据库中的列,然后导入或
(2)写一些filter,可以“找出”列应该是什么样的数据types。 我select了第一个选项,主要是因为我不认为我实际上可以编写一个程序来进行types推断。
如果你决定写一个types推断工具/转换,这里有几个问题你可能需要处理:
(1)Exceldate实际上是自1899年12月31日以来的天数; 那么如何推断那么一列是date而不是一些数字数据(例如人口)呢?
(2)对于文本字段,是否只创buildvarchar(n)types的列,其中n是该列中最长的条目,或者如果其中一个条目长于某个上限,那么是否使其成为无限制的字符字段? 如果是这样,什么是一个好的上限?
(3)如何以正确的精度自动将浮点数转换为小数点而不丢失任何地方?
显然,这并不意味着你将无法(我是一个非常糟糕的程序员)。 我希望你这样做,因为这将是一个非常有用的工具。

只是为了(我的)参考,我在下面logging了我所做的:

  1. XLRD是实用的,但是我已经将Excel数据保存为CSV,所以我可以使用LOAD DATA INFILE
  2. 我复制了标题行,并开始编写导入和规范化脚本
  3. 脚本执行:除了主键以外,所有列均为CREATE TABLE
  4. 查询mysql: LOAD DATA LOCAL INFILE将所有CSV数据加载到TEXT字段。
  5. 基于PROCEDURE ANALYSE的输出,我能够ALTER TABLE给列正确的types和长度。 PROCEDURE ANALYSE返回ENUM的任何有很less不同值的列,这不是我所需要的,但是我发现稍后有用于标准化。 使用PROCEDURE ANALYSE可以轻松地对200个色谱柱进行眼球筛选。 PhpMyAdmin提出的表结构是垃圾。
  6. 我主要在列上使用SELECT DISTINCT来编写一些规范化,并将结果INSERT到单独的表中。 我已经在旧表中添加了FK列。 就在INSERT后面,我有它的ID和UPDATE编辑FK列。 当循环完成时,我已经丢弃旧列,只留下FK列。 与多个从属列相似。 这比我预期的要快得多。
  7. 我运行(Django的) python manage.py inspctdb ,复制输出到models.py并添加所有这些ForeignkeyField作为FKs不存在MyISAM。 写了一个python的views.py,urls.py,几个模板… TADA