sqlite入门-读取excel存入sqlite-附详细注释

在python中,虽然pandas也能进行数据操作,但可读性显然比不上sql语句;考虑到python自带sqlite,使用sqlite操作数据也就成为一种方便的选择。

要存入数据库的是一个excel,名称为 美国家庭收入中位数平均数.xlsx,为真实数据,单位为美元。内有3列,全是数字,分别代表年份 、 美国家庭住户年收入中位数、,美国家庭住户年收入平均数。

数据如下:

200861,521.0079,634.00
200960,088.0078,538.00
201060,236.0078,180.00
201160,974.0081,007.00
201262,241.0082,843.00
201365,471.0087,671.00
201466,632.0088,765.00
201570,697.0092,673.00
201672,707.0097,357.00
201775,938.00100,400.00

处理数据的思路:先用openpyxl包读取数据,然后将数据按行插入sqlite(其实这样不大方便,如果将dataframe整个存进去不更好吗?)

代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: codeuniverse time:2020/10/06
# 参考资料
# https://blog.csdn.net/weixin_43894266/article/details/86821437
# https://docs.python.org/zh-cn/2/library/sqlite3.html

import sqlite3
import openpyxl

# 从excel中读取数据,注意openpyxl只能读取xslx不能读取xls
# 从Excel表格中读入数据, 并写入book中进行存储
book = openpyxl.load_workbook(r'....\美国家庭收入中位数平均数.xlsx')
#获取excel文件当前表格
sheet = book.active

#数据库操作
# 新建表格
con = sqlite3.connect(r"....\USA历年收入2021.db")
# 创建游标对象
cursor = con.cursor()
#创建1个名为USAsalary的表,内有3列,NowYear作为主键,美国家庭住户年收入中位数,美国家庭住户年收入平均数,数据类型均为整数
sql = '''
    create table if not exists USAsalary
     (
        NowYear integer primary key autoincrement,
        美国家庭住户年收入中位数 integer not null,
        美国家庭住户年收入平均数 integer not null
     );
'''
#执行创建表格
cursor.execute(sql)
# 插入一行数据
cursor.execute("INSERT INTO USAsalary VALUES (2032,100,35)")
# 插入多行数据
data_truck = '''INSERT INTO USAsalary(NowYear,美国家庭住户年收入中位数,美国家庭住户年收入平均数) VALUES (?,?,?)'''
for row in sheet.iter_rows():
#使excel各行数据成为迭代器
    #使每行中单元格成为迭代器
    cargo = [cell.value for cell in row]
    #写入一行数据到数据库中
    cursor.execute(data_truck, cargo)

#查询2007年的收入
t = ('2007',)
cursor.execute('SELECT * FROM USAsalary WHERE NowYear=?', t)
print(cursor.fetchone())


#提交更改
con.commit()
#提交后关闭连接
con.close()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值