蓝天,小湖,湖水中一方小筑

创新的数据总算导完了

先是存成sql语句,然后回来才想起来,PHP用的是我自己建的表,而Django中要用它的表,两个结构不同,用不了sql语句,于是想到用导入csv文件的办法, 刚好setp by step有这个例子,而且Django中可以直接导入csv文件,不用我再去写那些分隔什么的了,还是满方便的,所以就想到了导入csv文件。
想好了就要开工,那个例子以前做过,所以还有点印象。首先是写module,主要就是构建数据表的结构,想了好久,才觉得大概能够把表结构定下来了,不过还是相当于留 了两个备注字段,应该够用了吧,如果不够用需要倒数据的话那真要疯了。其实说疯也有些夸张,再写程序导吧,呵呵。
一开始写的module中没有主键,主要是看它的文档中说它会自己加上一个自增的主键,所以没去理会,但是在导入的时候,有一个filter要选择一条记录,一开始不 知道,使用第一个字段,即申请人做关键字,结果前面写进去的记录当碰到后面相同申请人的记录时,全部被覆盖(我的那个csv文件后面有一个空行,在导入的时候读入最后 一行的时候会出错,下标越界,不过还好,前面的数据都导入了)。后来把csv文件分成了大概10条一个的小文件,再导入的时候才发现是这个问题,再看看它的文档说是如 果用户自己没有设置自境的主键的话,系统会给设一个,不过我试了,不能调用,于是自己设一个吧(又把表结构重弄了一遍,真的很FT,还好没什么数据),后来问题就解决 了。在module.py中的__str__方法中可以设置在管理界面中每一条记录显示的内容,step by step中说还有一个__repr__,但是我用了后没反应,不知道为什么。最后还要加上一个class Admin: pass以开启管理功能。
在使用导入csv功能的时候,那个urls的映射要弄好,要不然服务器会提示找不到匹配的模式,不予解析。一般是在根目录下的urls.py中设置如果要访问app, 则把app中的utls.py包含进来,然后再在urls.py中解析对应于app的地址映射。
本来想用sqlite数据库,不过用了一段时间,感觉上还是有些不方便的地方,一是管理工具不是很方便,二是性能上处于劣势,最后考虑了一会,还是选用了mysql, 导入的时候明显速度快了很多,不过那段导入的代码还是很有用的,到时候如果再换表结构的话,就又要用到它了。
数据方面总算折腾完了,现在要把原来的表的记录改动一下,让它适应新的表的结构,还有一些细节方面的问题,像文件上传,显示的图标什么的,慢慢做吧,不管怎么说,大头 数据导进来了,也没什么好怕的了。

btw: django中不能直接接收2000-01-01格式的字符串作为datetime类的输入,还要把它拆开成'2000', ‘01’, ‘01’三个字串,不知道后续版本会不会把这个功能加上,虽然不加也能用,只要用下标把子串取出来就可以了,但总感觉有些不爽。