安全的将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;