收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目。

article/2025/10/6 19:05:53

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

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

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

本文主要内容:

  • 数据读取和插入:包括原始数据的读取、插入数据库。

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

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

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

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

1.1 源代码

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 17 15:06:42 2020@author: liulu源代码已发布到【智能演示】微信公众号,后台回复 sqlite3 可获取下载链接。
"""
import sqlite3
import os
path = os.getcwd()
files = os.listdir(path)conn = sqlite3.connect(path+'\db.db')
cur = conn.cursor()cur.execute('create table if not exists numbers (id integer primary key ,number varchar(20) NOT NULL)')
conn.commit()i = 0
for file in files:if file.split('.')[-1] == 'txt':with open(file,'r',encoding = 'UTF-8') as f:next(f)for line in f:i += 1print("插入第", i, "条数据:")#print(line)cur.execute('insert into numbers values(?,?)',(i,line))conn.commit()
cur.close()
conn.close()
print('数据写入完成!共写入',i,' 条数据')

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
import os
path = os.getcwd()
files = os.listdir(path)
conn = sqlite3.connect(path+'\db.db')
cur = conn.cursor()

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

2.2 查询数据库中有哪些表

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

cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
Tables=cur.fetchall()
print(Tables)
# [('numbers',)]

2.3 删除数据库中的某个表

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

cur.execute("drop table tablename;")

2.4 查询某个表的结构

cur.execute("PRAGMA table_info(numbers)")
print(cur.fetchall())
# [(0, 'id', 'integer', 0, None, 1), (1, 'number', 'varchar(20)', 1, None, 0)]

2.5 查询表中前50条记录

cur.execute("SELECT * from numbers limit 0,50;")
conn.commit
data = cur.fetchall()
print(data)

2.6 查询表中所有记录

# 5.查询表中所有记录
cur.execute("SELECT * from numbers;")
data_all = cur.fetchall()
a = len(data_all)
print('共有 '+ str(a) + ' 条记录')
#print(data)

2.7 查询表中不重复记录

cur.execute("SELECT distinct number from numbers;")
data_distinct = cur.fetchall()
b = len(data_distinct)
print('共有 '+ str(b) +' 条不重复记录')
#print(data_distinct)

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

# 创建一个新表
cur.execute('create table if not exists numbers_distinct (id integer primary key ,number varchar(20) NOT NULL)')
conn.commit()
# 插入数据
i = 0
for data in data_distinct:i += 1data = data[0]#print(data)cur.execute('insert into numbers_distinct values(?,?)',(i,data))conn.commit()

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

cur.execute("SELECT number from numbers_distinct limit 0,10;")
datas = cur.fetchall()
#print(datas)
with open('datafile1.txt','w') as f1:for data in datas:f1.write(data[0])f1.flush()

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

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

cur.execute("SELECT * from numbers_distinct limit 0,10;")
datas = cur.fetchall()
#print(datas)
with open('datafile2.txt','w') as f2:for data in datas:data0 = str(data[0]) # 将int类型转为str,否则write函数报错data = data0 + '    ' + data[1] # 在两列之间以Tab键分隔f2.write(data)f2.flush()

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

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

with open('datafile3.csv','w') as f3:for data in datas:data0 = str(data[0]) # 将int类型转为str,否则write函数报错data = data0 + ',' + data[1] # 在两列之间以逗号键分隔f3.write(data) # data是元组类型f3.flush() # 重要!将缓冲区的数据写入文件中

2.12 办公自动化案例

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

1)源代码

"""
源代码已发布到【智能演示】微信公众号,后台回复 sqlite3 可获取下载链接。
"""
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 就可以获取下载链接。

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

本文完,谢谢阅读!

本文首发【智能演示】微信公众号,欢迎关注,公众号后台回复【课程】领精选视频课程。


猜你喜欢:
1. 一文学懂Python数据结构之字符串基础知识
2. 这是format函数的骚操作???
3. 用Markdown,3分钟搞定微信公众号文章排版!
4. PPT居然还可以一键换色!学会这4招再也不怕色了……
5. 7步完成MySQL配置,极简教程,还不来试试?
6. 4 行代码实现批量、快速安装 Python 第三方库
7. 让程序帮你干活!批量转换任意文件夹下Word文档为PDF
8. 我用 Python 处理3万多条数据,只要几秒钟……


扫描下方二维码,
回复【课程】获取精选视频课程!

觉得好看就点个在看吧……


http://chatgpt.dhexx.cn/article/rrqRoTMW.shtml

相关文章

SQLTools: 一款全功能的 VScode 轻量级数据库管理插件

公众号关注 「奇妙的 Linux 世界」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; VSCode SQLTools 是一个非常轻量级的数据库管理插件&#xff0c;可以在 VSCode 中轻松管理数据库连接、查询、SQL语句智能提示、书签、查询历史等等&#xff0c;常用的管理功能都有。…

c#中使用轻量级数据库sqlite开发总结

首先简单说明下含义&#xff0c;sqlite数据库是一种轻量级的数据库&#xff0c;主要特点是免安装、免配置、简单小巧&#xff0c;在程序中的开发基本和sql数据库一致。 准备工具&#xff1a;system.data.sqlite.dll和sqlite-shell-win32-x86-3081101&#xff0c;前者用来在程序…

最近发现的 3 个 Python 轻量级数据库,好用到爆!

你好&#xff0c;我是征哥&#xff0c;在写程序的时候经常会需要将数据保存到本地&#xff0c;比如是配置文件&#xff0c;或者是中间过程数据&#xff0c;通过情况下我会选择 json、pickle 或者 sqlite。但是他们都有点不大方便。 比如 json 和 pickle&#xff0c;需要先序列化…

sqlite原理分析和开发应用

概述 SQLite介绍 自几十年前出现的商业应用程序以来&#xff0c;数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样&#xff0c;它们也变得非常庞大&#xff0c;并占用了相当多的系统资源&#xff0c;增加了管理的复杂性。随着软件应用程序逐渐模块模块…

SQLite3-轻量级数据库

SQLite主页&#xff1a;SQLite Home Page SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使…

Wise Duplicate Finder(重复文件查找工具)v1.2.9.40中文免费版

Wise Duplicate Finder是一款简洁高效的重复文件管理工具&#xff0c;通过匹配文件名&#xff0c;文件大小或内容来查找和删除重复的文件&#xff0c;使用户摆脱烦人的重复文件&#xff0c;释放更多磁盘空间&#xff0c;有需要的赶快下载吧&#xff01; 功能介绍&#xff1a; …

如何查找和删除Endnote中重复的文献

点击Reference&#xff0c;在列表中找到“Find Duplicates”

Linux命令模糊查找

1&#xff0c;在某文件夹下查找&#xff0c;且模糊匹配 find . -name xx* 且中间都必须用空格间隔 2&#xff0c;mv 命令格式运行结果mv 文件名 文件名将源文件名改为目标文件名mv 文件名 目录名将文件移动到目标目录mv 目录名 目录名目标目录已存在&#xff0c;将源目录…

文件包含漏洞详解

文章目录 文件包含概述漏洞产生原因漏洞特点小知识文件包含函数includerequireinclude_oncerequire_once 文件包含示例pikachu靶场本地文件包含漏洞演示pikachu靶场远程文件包含漏洞演示文件包含漏洞的利用PHP伪协议&#xff08;文件包含漏洞常用的利用方法&#xff09;文件包含…

【操作系统实验】Ubuntu Linux 虚拟机文件查找相关命令

文章目录 whereishelpmanfindlocategrepwc管道 whereis 功能描述&#xff1a;寻找命令的二进制文件。 同时也会找到其帮助文件&#xff0c;主要功能是寻找一个命令所在的位置。和find相比&#xff0c;whereis查找的速度非常快。 语法&#xff1a; whereis [选项] [命令名称] …

用 Python 实现文件查找

用 Python 实现文件查找&#xff08;BIF实现及队列实现&#xff09; &#xff08;1&#xff09;利用内置函数实现文件查找 1、功能&#xff1a;返回用户输入的文件的绝对路径 2、设计思路&#xff1a; &#xff08;1&#xff09;用户输入在哪个盘进行查找&#xff08;2&#xf…

如何测试电脑软件重复或多,如何快捷找出电脑内的重复文件(两个工具)

我特喜欢收集各种软件和资料&#xff0c;但是时间久了&#xff0c;很多软件和资料之前下载过了&#xff0c;后来不记得了&#xff0c;又下载了&#xff0c;这样重复的非常多。还有&#xff0c;我喜欢备份文件&#xff0c;就算一些普通的文件&#xff0c;也会随手临时备份一下&a…

使用代码克隆检测功能查找重复代码

代码克隆是非常相似的独立代码片段。 在已开发一段时间的应用程序中&#xff0c;常会出现这种现象。 克隆提高了更改应用程序的难度&#xff0c;因为你必须找到并更新多个片段。 Visual Studio Ultimate 或 Visual Studio Premium 可帮助你查找代码克隆&#xff0c;以便你进行重…

计算机上的查找替换功能快速格式化,Excel 2016中使用查找替换功能应用技巧

大家知道Excel中有查找和替换这个功能,懂得按住【Ctrl+F】可以直接打开“查找”对话框,按住【Ctrl+H】直接打开“替换”对话框。但你真的很了解这个功能了吗? 在使用Excel的时候,对于其中的查找功能的使用基本是比不可少的,那Excel中都可以在哪里进行查找呀。下面说下在Ex…

虚拟化、文件系统、查找文件

文章目录 虚拟化虚拟化的概念安装KVM安装gustos了解并配置KVM网络桥接&#xff1a;NAT:仅主机(hostonly): 文件系统了解文件系统的概念&#xff1a;了解硬链接的概念&#xff1a;挂载文件系统&#xff1a; 查找文件&#xff1a; 虚拟化 虚拟化的概念 虚拟化≠虚拟机 虚拟化里…

Duplicate Cleaner Pro(电脑重复文件清理软件)官方中文版V5.15.0 | 重复文件查找王下载

Duplicate Cleaner Pro 是一款相当出色的电脑重复文件清理软件&#xff0c;有重复文件查找王的美誉&#xff0c;支持字节、MD5以及其他多种哈希算法等内容比对方式&#xff0c;主要功能就是帮助大家从计算机硬盘中深入快速扫描查找并删除重复的文件、音乐、视频、照片、文档以及…

python删除重复文件

使用场景 网上爬取的图片重复量太大&#xff0c;需要删除重复图片。 环境 python 3 hashilib 分析一下这个问题&#xff1a; 首先&#xff0c;文件个数非常多&#xff0c;手工查找是不现实的&#xff0c;再说&#xff0c;单凭我们肉眼&#xff0c;在几千张图片或文件里面找…

工具及方法 - 使用Total Commander来查找重名文件

我只是一个Total Commander的轻度使用者&#xff0c;主要使用的是打开多个窗口&#xff0c;可以方便的以标签形式切换。 还有&#xff0c;这个软件是免费的&#xff0c;只是免费版打开时多一步&#xff0c;要输入个数字验证。 今天在使用一个SDK时&#xff0c;要包含进很多头文…

在群晖中批量删除重复文件

安装“存储空间分析器”套件配置“重复文件候选”报告&#xff0c;并生成报告查看并下载报告用excel打开报告并筛选出需要删除的文件 IF(A2A1,1,"")上传文件到群晖&#xff0c;并配置计划任务 cat 文件路径 | xargs -I {} rm -f "{}"执行并删除计划任务提醒…

在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法

Qidi 2020.12.12 0. 前言 看到很多人说在 QNAP NAS 上使用 fdupes 工具只能实现查找重复文件的效果&#xff0c;要删除文件只能对照生成的重复文件列表手动操作。这个说法其实是不对的&#xff0c;fdupes 完全支持自动去重功能。 以下正文说明了使用 fdupes 工具自动查找并删…