点击上方   编程学习者社区,选择   创建星标

回复关键字   资源   获取编程资料

很多粉丝给我私信,有的朋友说:MySQL安装起来太麻烦了,有没有更简便的方法?

肯定是有的!Python内置的sqlite3模块是一个轻量级的数据库,不需要独立的服务器进程。它的数据库就是一个.db后缀的文件,可以跨平台直接访问,非常便捷。简直就是轻量级数据的首选数据库啊!

今天我们就来用Python实战操作一下sqlite3,通过本案例可以完全掌握sqlite3的常用操作。

本文主要内容:

  • 数据读取和插入:包括原始数据的读取、插入数据库。
  • 数据库操作:包括数据的查询、删除、导出等操作,最后上一个自动化导出的案例。

1. 读取数据并插入数据库

本文以TXT文件为例,进行示范操作。TXT文件为单列数据,以换行符分割,文件数量60+,数据总量5万+。

程序设计思路:自动读取每个TXT文件,再依次读取每一行并插入数据库中。

1.1 源代码

# -*- coding: utf-8 -*-

1.2 运行效果

代码运行效果图

1.3 重点代码解释

1)自动获取所有TXT文件名称和路径

了解我的读者都知道,我是比较懒的,我不喜欢指定程序的路径。我写的程序都是自己找路径,自己找文件名称。感兴趣的朋友可以去我的公众号(智能演示)查看这篇文章:获取任意路径下文件名称的2种方法。

2)数据库的创建与连接

conn = sqlite3.connect(path+'\db.db')

path是程序所在路径,也是TXT文件的所在路径。这行代码的意思是:如果数据库已经存在,则连接数据库;如果数据库不存在,则先创建数据库,再连接该数据库。

3)创建表

cur.execute('create table if not exists numbers (id integer primary key ,number varchar(20) NOT NULL)')

在数据库db.db 中创建表numbers,表中包含两个字段:id、number。

注意!一定不要忘了conn.commit()保存一下!不然后面的数据是插不进去的。

4)插入数据

①优化打开方式

with open(file,'r',encoding = 'UTF-8') as f:

建议使用 with 语句来打开TXT文件。这样做的好处是,当对象会在with语句结束时会自动关闭。效率更高!不易出错。

②占位符功能

cur.execute('insert into numbers values(?,?)',(i,line))

(?,?) 起到占位符功能,(i,line))中的值会按位置替换到SQL语句中。

这样就实现了数据的自动插入数据库。需要几分钟时间,请耐心等待。

我们查看下db.db文件属性,可以看到存储了51216条数据的数据库文件大小只有1.13MB,可以说是很轻量的。你可以将这个数据库文件复制到任意一台电脑上,连接上数据库即可进行操作,非常方便。

下面就来说一下sqlite3的常用操作。

2. 数据库操作

2.1 连接数据库

import sqlite3

这样就连接上了刚才的数据库。path+'\db.db'是数据库的路径及文件名,你可以手动输入路径,也可以将.py文件和db.db数据库文件放在同一目录下,系统自动计算路径,这是懒人方法。

2.2 查询数据库中有哪些表

我们似乎不知道db.db这个数据库中有什么,如何才能知道这个数据库中有哪些表呢?

"SELECT name FROM sqlite_master WHERE type='table';")

2.3 删除数据库中的某个表

如果需要删除数据库中的某个表,可以执行以下命令:

cur.execute("drop table tablename;")

2.4 查询某个表的结构

"PRAGMA table_info(numbers)")

2.5 查询表中前50条记录

"SELECT * from numbers limit 0,50;")

2.6 查询表中所有记录

# 5.查询表中所有记录

2.7 查询表中不重复记录

"SELECT distinct number from numbers;")

2.8 将老表中的不重复记录插入新表

# 创建一个新表

2.9 将特定结果写入文本文件(单列)

"SELECT number from numbers_distinct limit 0,10;")

注意:f1.flush()操作很重要!将缓冲区的数据写入文件中,否则文本文件为空白,导致写入失败。

2.10 将特定结果写入文本文件(多列)

"SELECT * from numbers_distinct limit 0,10;")

2.11 将特定结果写入CSV文件(多列)

写入CSV文件和写入文本文件的方法基本相同,只需要将文件后缀改为 '.csv',并将分隔符改为英文状态下逗号即可。

with open(

2.12 办公自动化案例

本文以:将number_distingct表中的数据,以每50个为一组,分别存入一个文本文件为例,演示以下Python结合sqlite3数据库的办公自动化的惊艳效果。

1)源代码

for n in range(int(b/50)+1):if 50*n+50 < b: # b为数据记录总数        cur.execute('SELECT number from numbers_distinct limit ?,?',(50*n,50))        datas = cur.fetchall()#print(datas)        filename = str(50*n) + '-' + str(50*n+50) + '.txt'        print('正在写入:' + filename)with open(filename,'w') as f4:for data in datas:                f4.write(data[0]) # data是元组类型                f4.flush() # 重要!将缓冲区的数据写入文件中else:        filename = str(50*n) + '-' + str(b) + '.txt'        print('正在写入:' + filename)with open(filename,'w') as f5: # 计算最后一个文本文件名称            cur.execute('SELECT number from numbers_distinct limit ?,?',(50*n+50,50))            datas = cur.fetchall()for data in datas:                f5.write(data[0]) # data是元组类型                f5.flush() # 重要!将缓冲区的数据写入文件中print('写入完成!共写入{}个TXT文件。'.format(n+1))

2)运行效果

导出719个TXT文件,几秒钟就完成了。

3)重点代码解释

这个案例的重点是如何计算出每个TXT文件的名称。

我们可以计算出numbers_distinct表中共有35926条数据。

我们可以构建这样一个函数:filename = str(50*n) + '-' + str(50*n+50) + '.txt',用来计算每个导出的TXT文件名称。

但是最后一个文件的名称不能通过这个方法来构建,需要作以下简单的修改:filename = str(50*n) + '-' + str(b) + '.txt'

计算好每个TXT文件名称后,直接用write函数写入就可以了。

快来动动手试一下吧,享受一下办公自动化!

本文完,谢谢阅读!

公众号后台回复 sqlite3 获取源码

作者:智能演示
来源:Ckend

往期精选

  • 在知乎上学Python-入门篇

  • 在知乎上学爬虫

  • 大家都用什么背英语单词

  • Python库分享

csgo下方各种数据都是意思_比MySQL还好用的数据库,不会都不好意思。相关推荐

  1. sql 插入新数据 如何处理等字符_新手们还在到处找报表资料吗?Intouch SQL 数据库脚本给你安排...

    SQL Access Manager简介 SQL Access Manager是InTouch的可选组件.可以使用SQL Access Manager来传输数据,例如从SQL数据库到InTouch应用 ...

  2. mysql提交数据时会丢失一部分_技术|MYSQL数据丢失讨论

    1.   概述 很多企业选择MySQL都会担心它的数据丢失问题,从而选择Oracle,但是其实并不十分清楚什么情况下,各种原因导致MySQL会丢失部分数据.本文不讨论Oracle和MySQL的优劣,仅 ...

  3. mysql数据应用从入门_《MySQL数据库应用从入门到精通》

    第1章 数据库概述 1.1基本概念 1.1.1数据库技术发展阶段 人工管理阶段-->文件系统阶段-->数据库系统阶段 1.1.2涉及的概念 数据库(DB).数据库管理系统(DBMS).数据 ...

  4. mysql设计思想_这些Mysql基础设计思路以及优化思路我都给你总结好了

    原标题:这些Mysql基础设计思路以及优化思路我都给你总结好了 1.定长和不定长要区分开 2.不常用的列和常用的列分开存 3.增加冗余,反范式化 4.btree索引,就是用树形结构存储在磁盘上,其中操 ...

  5. mysql内核架构_热血江湖mysql内核技术之门派数据库表结构说明

    小编之前已经多次和大家说过了一个概念,不管你打算架设的是什么游戏什么版本都必须熟悉它的数据库整体结构.今天小编要说的是热血江湖私服游戏中最难的MYSQL内核技术,对于玩家来说MYSQL技术无疑是最难的 ...

  6. mysql中下列关于创建_在 MySQL 中,下列关于创建数据库表的描述正确的是( )。_学小易找答案...

    [单选题]在表中设置外键实现的是哪一类数据完整性( ) [单选题]以下为概念模型的是() [论述题]• 参照 < 中国图书馆分类法 > ,谈一下你对自己所学专业在整个科学知识领域中所在的位 ...

  7. mysql 中修改对象_在MySQL中,创建一个数据库后,还可以对象其进行修改,不过这里的修改是指可以修改被创建数据库的相关参数,也可以修改数据库名。...

    [多选题]注射时,在(  )情况下,采用较高的注射速率. [单选题]通常,所设置的模具温度是指和制品接触的模腔内表面在(   ). [单选题]反映某一事件发生强度的指标应选用 [判断题]当试样制备之后 ...

  8. mysql中要创建choose数据库_在MySQL中要创建choose数据库,应该使用命令“crea

    在MySQL中要创建choose数据库,应该使用命令"crea 在MySQL中要创建choose数据库,应该使用命令"createtablechoose;" 血压调节实验 ...

  9. 比 MySQL 还好用的数据库,不会都不好意思。

    前段时间推送了一篇Python操作MySQL数据库的文章:我用 Python 处理3万多条数据,只要几秒钟--,文章发布后反应很好,很多粉丝给我私信,有的朋友说:MySQL安装起来太麻烦了,有没有更简 ...

最新文章

  1. 高德地图POI搜索,附近地图搜索,类似附近的人搜索
  2. ABAP:SmartForms--设计
  3. List集合、常用数据结构基本了解
  4. js中一些常用的基本函数
  5. 计算机一级基础知识理论,计算机一级考试理论试题 第6部分 信息与计算机基础知识...
  6. WinZip命令行详解
  7. vba while 结束_Python | 教材纰漏,出现while的无限循环错误
  8. 写一本Linux内核方面的书籍
  9. 【渝粤题库】广东开放大学 管理会计 形成性考核
  10. The NVIDIA driver on your system is too old (found version 9000).
  11. 手写笔记软件评测Notability、GoodNotes、MarginNote、OneNote
  12. Cortex m0+笔记
  13. win7共享wifi自动获取不到ip地址的解决办法
  14. Flurry、友盟、TalkingData移动应用统计分析对比
  15. 为何苹果不会成为一个手机公司?
  16. 【黑曼巴】菜鸟HTML
  17. myCPUZ (未完待续)
  18. 【Audio音频兴趣拓展】麦克风阵列_声音定位
  19. 分享到新浪微博/QQ空间/开心网/人人网/豆瓣网/QQ书签/百度搜藏/美味书签 代码...
  20. 如何利用市场情绪套利

热门文章

  1. 从资源的角度统一看to C和to B商业模式
  2. Base64加密方式详解
  3. 冷却塔直纹面的matlab,冷却塔
  4. 什么是反向代理,反向代理是如何工作的?
  5. 计算机操作系统重点知识点记录【持续更新】
  6. Objects类的常用方法
  7. 剑网3角色服务器正在维护,12月16日《剑网3》服务器例行维护公告
  8. 使用ComposeDesktop开发一款桌面端多功能APK工具
  9. 华为型号5g版本是android,华为手机中支持5g手机的有哪些型号?
  10. 快步英语说文解字颠覆中国传统英语教学模式