安全的将excel导入sqlite3的解决方案

最近在做一个小项目时,需要把一个excel中的数据保存到sqlite3数据库中以备后用,表中有字符也有数字,要用到特定的数据类型方便后续使用,参照网上的方法,将excel文件转换为csv文件后,在导入数据时发现数据库提示无法转换为特定类型:

创建表的语句为:

create table information(id integer primary key autoincrement,Date text,Sour text,Dest text,Stime text,Dtime text,Cost integer,Ptime integer,Weight integer);

这时候提示的是数据类型不匹配,其实这只是警告,这个时候去查找数据,这个表中是有数据的,但是尤其在做项目的时候,要尽可能避免任何意外,所以我们用一种安全的方法创建数据库。

删除之前创建的表

这次我们不定义表结构,采用直接导入的方法

直接导入倒是成功了,不过这里看到的表结构与我想要的不太一样,全是text类型了,但我要有各种不同类型的数据。这时候看到了一片文章,受到启发。我可以试试把这个导入进来的新表(即info表)重新导入到我想要的表结构的那个表(即information)中

然后构造了如下语句:

insert into information(id,Date,Sour,Dest,Stime,Dtime,Cost,Ptime,Weight) select ID,Date,Sour,Dest,Stime,Dtime,Cost,Ptime,Weight from info;

这次发现完全没有任何报错,因为这次在数据库内部自动进行了数据类型转换。接下来就可以安全的使用数据库了

 

总结:

其实把excel导入sqlite3步骤很简单

第一步:把excel保存为csv格式的文件,编码方式选为utf-t

第二步:创建数据库,并设置以点号作为分隔符:.separator ','

第三步:直接导入csv文件,任意名称的表明即可:.import information1.csv information

第四步:按照自己的要求创建相应数据类型的表结构:

create table information(id integer primary key autoincrement,Date text,Sour text,Dest text,Stime text,Dtime text,Cost integer,Ptime integer,Weight integer);

第五步:把前一个表的内容导入到这张新表:

insert into information(id,Date,Sour,Dest,Stime,Dtime,Cost,Ptime,Weight) select ID,Date,Sour,Dest,Stime,Dtime,Cost,Ptime,Weight from info;

第六步:删除前一个表

drop table info;

 

posted @ 2016-11-23 19:25  隐念笎  阅读(1279)  评论(0编辑  收藏  举报