irpas技术客

Python数据库操作【一】—— Sqlite_虚梦年华_python sqlite

网络 1813

Sqlite简介

以下摘自百度百科:

? ? ? ?SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2021年已经接近有21个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

python中内置Sqlite3,故无需安装第三方库,直接使用即可。

本文代码已上传至GitHub,项目地址如下:

https://github.com/XMNHCAS/SqlitePythonDemo

建库建表

在测试文件夹中创建CreateDatabase.py,导入sqlite3,然后创建一个sqlite数据库,并创建一张User表。

import sqlite3 # 若无该数据库,则创建Sqlite数据库并打开 # 若有,则直接打开数据库 conn = sqlite3.connect('test.db') # 获取该数据库的游标 cursor = conn.cursor() # 执行一条SQL语句,创建user表: cursor.execute('CREATE TABLE User (ID INTEGER Primary KEY, Name TEXT, Age INTEGER)') # 关闭Cursor: cursor.close() # 提交事务: conn.commit() # 关闭Connection: conn.close()

运行后则会在create.py所在的目录下生成一个test.db的文件,该文件即为sqlite数据库文件,若需要连接其他位置的sqlite数据库,则在connect?填入对应的数据库文件路径即可。

使用navicat打开test.db,可以看到我们已经成功创建User表。


增删改查(CRUD) 新增记录(Create)

直接使用游标执行insert语句,可以获取到影响的行数。

import sqlite3 # 打开数据库 conn = sqlite3.connect('test.db') # 获取该数据库的游标 cursor = conn.cursor() # 执行单条数据插入,并返回操作行数 singleInsert = cursor.execute("INSERT INTO User (Name, Age) VALUES ('张三', 18)") print(f"插入了{singleInsert.rowcount}条数据") # 执行批量插入,并返回操作行数 sql = "INSERT INTO User (Name, Age) VALUES (?, ?)" batchInsert = cursor.executemany(sql, [('李四', 19), ('王五', 22)]) print(f"批量插入了{batchInsert.rowcount}条数据") # 关闭Cursor: cursor.close() # 提交事务: conn.commit() # 关闭Connection: conn.close()

运行结果:

使用navicat查询可以看到数据已经成功插入:

检索记录(Retrieve)

检索记录分三种模式,第一种是直接获取全部数据,第二种是获取前N条数据,第三种是移动游标,一条一条地获取数据。

import sqlite3 # 打开数据库 conn = sqlite3.connect('test.db') # 获取该数据库的游标 cursor = conn.cursor() # 获取全部记录 cursor.execute("SELECT * FROM User") allData = cursor.fetchall() print("直接获取全部记录:") for item in allData: print(item) # 获取前N条记录 cursor.execute("SELECT * FROM User") manyData = cursor.fetchmany(2) print("获取部分结果:") for item in manyData: print(item) # 一次读取一条结果,循环获取所有记录 cursor.execute("SELECT * FROM User") print("一次读取一条结果,循环获取所有记录:") while True: singleData = cursor.fetchone() if singleData is None: break print(singleData) # 关闭Cursor: cursor.close() # 提交事务: conn.commit() # 关闭Connection: conn.close()

运行结果如下:

更新记录(Update)

可以仅修改单条记录,也可以修改多条记录。

import sqlite3 # 打开数据库 conn = sqlite3.connect('test.db') # 获取该数据库的游标 cursor = conn.cursor() cursor.execute("SELECT * FROM User") print("修改前的数据:") print(cursor.fetchall()) # 执行单条数据修改,并返回操作行数 singleUpdate = cursor.execute("UPDATE User SET Age = 20 WHERE Name = '张三'") print(f"修改了{singleUpdate.rowcount}条数据") cursor.execute("SELECT * FROM User") print("修改单条数据后的数据:") print(cursor.fetchall()) # 执行批量修改,并返回操作行数 sql = "UPDATE User SET Age = ? WHERE Name = ?" batchUpdate = cursor.executemany(sql, [(25, '李四'), (35, '王五')]) print(f"批量修改了{batchUpdate.rowcount}条数据") cursor.execute("SELECT * FROM User") print("批量修改后的的数据:") print(cursor.fetchall()) # 关闭Cursor: cursor.close() # 提交事务: conn.commit() # 关闭Connection: conn.close()

运行结果如下:

删除数据(Delete)

同样支持删除单条数据或者批量删除数据。

import sqlite3 # 打开数据库 conn = sqlite3.connect('test.db') # 获取该数据库的游标 cursor = conn.cursor() cursor.execute("SELECT * FROM User") print("删除前的数据:") print(cursor.fetchall()) # 执行单条数据修改,并返回操作行数 singleDelete = cursor.execute("DELETE FROM User WHERE ID = 1") print(f"删除了{singleDelete.rowcount}条数据") cursor.execute("SELECT * FROM User") print("删除单条数据后的数据:") print(cursor.fetchall()) # 执行批量删除,并返回操作行数 sql = "DELETE FROM User WHERE ID = ?" batchDelete = cursor.executemany(sql, [('2'), ('3')]) print(f"批量删除了{batchDelete.rowcount}条数据") cursor.execute("SELECT * FROM User") print("批量删除后的的数据:") print(cursor.fetchall()) # 关闭Cursor: cursor.close() # 提交事务: conn.commit() # 关闭Connection: conn.close()

运行结果如下:


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Python #sqlite