七行代码把excel存入数据库sqlite3,顺便写了可逆过程,就是把数据库db文件再转为excel
本人博客地址 :https://blog.csdn.net/hq606
作者 :hq606
创作不易转载请注明链接和出处
前面写了一篇关于把excel存入sqlit的方法。文章地址附上:
https://blog.csdn.net/hq606/article/details/105534832
可以看得出,(全靠xlrd方法)参考了大量文章,自己还修改了半天,还是不通用,每次使用还得临时修改。
今天分享另外一个办法,超级简化。
平时做爬虫取得数据经常写入excel,但是excel在调用的时候,不是很方便,需要写较多的代码。
以前见过pandas可以把excel直接存入excel。但是还没研究过能不能存入sqlit里面。因为里面参数配置不同,网上搜了一下也是很少,以为是用pandas不能连接sqlit。
但是好奇心一直不能平静,而且自己正在学习阶段,为啥不尝试一下呢。
#实现代码如下
##方法 pandas excel to sqlit3
def exlTOsql():
import pandas as pd
from sqlalchemy import create_engine
import sqlite3
file =r"C:\Users\mayn\Desktop\学生管理系统\19年10月11日高二第一次月考成绩_理科(4).xlsm"
df = pd.read_excel(file)
con=sqlite3.connect('mydata.db')
df.to_sql('mytable02',con=con,if_exists='replace',index=False)
exlTOsql()
看到代码是不是觉得,非常的Python ,真正的Python风格。
由于过程太快,实在是不放心,下面又读取数据库,发现真的写入了
于是我又写了逆过程,把db数据,又输出到excel代码如下
##方法 pandas sqlit3 to excel
def sqlTOexl():
#查询数据库 再重新转为excel
import sqlite3
import pandas as pd
conn = sqlite3.connect('mydata.db')
sql="select * from mytable02"
cur=conn.cursor()
cur.execute(sql)
results =cur.fetchall()
#print(results)
conn.close()
#把数据库数据转入csv
rs=pd.DataFrame(results,columns=('id','姓名','班级','总分','班排名','校排名','语文',' 排名','数学','排名 ','外语',' 排名','物理','排名 ','化学','排名 ','生物',' 排名',' ',' ')) # rs=pd.DataFrame(res,columns=('id','姓名','总分','排名','排名','语文',' 排名','数学','排名 ','外语',' 排名','物理','排名 ','化学','排名 ','生物',' 排名',' ',' '))
print(rs)
rs.to_csv('file_name.csv',index=True,header=True,encoding='gbk')
#把csv转为excel
#pd.DataFrame(rs).to_excel("abc.xlsx",sheet_name="123",index=False,header=True) #这种办法 把DataFrame直接转为excel不需要csv
#csv = pd.read_csv('file_name.csv', encoding='utf-8')
#csv.to_excel('abc.xlsx', sheet_name='123') #这种办法 把csv直接转为excel
sqlTOexl()
最后一点思考,Python真的是一种胶水语言,它的灵活,简洁,使你专注于程序的性能,逻辑,设计,让人更多的把精力放在思考解决问题上,而代码尽量简化,因为有大量的轮子可用,平时编程也是,尽量做模块化,函数或者类。使得自己代码延续性,复用性更好,才能进阶到高级。