ISEE小语
“从来不会想起,但永远不会忘记。”这句话有点矛盾,但你还挺认同。
——来自网友
回顾上篇
Python制作一个时间戳转换工具
ISEE小栈,公众号:ISEE小栈Python中pywebview库使用并制作一个时间戳转换工具(附源码+exe)
开始本篇
SQLite是一种轻量级的嵌入式关系型数据库管理系统,它以库的形式被集成到应用程序中,不需要独立的服务器进程,可以直接使用文件进行存储。
SQLite适合于一些小型、独立的数据存储需求,特别合适于一些嵌入式和移动应用场景,如本地的数据管理需求,特别适用于原型开发、教学和小型应用程序的场景等。
在Python中,通过使用sqlite3内置模块操作SQLite数据库。sqlite3模块提供了一系列用于执行SQL语句的方法。本次将常用的增、删、改、查方式整体封装了一下,共享!
环境:
Python 3.9.16
PyCharm
导入:
import sqlite3
一、连接到数据库
连接到数据库,如果不存在,则会自动创建
def connect(self):
# 连接到数据库(如果不存在,则会自动创建)
conn = sqlite3.connect('isee.sqlite')
# 创建一个游标对象
cursor = conn.cursor()
return conn, cursor
(左右滑动查看完整代码)
可以看到在当前目录下新生成一个isee.sqlite的文件。
二、关闭连接
关闭连接和游标
def connect_close(conn, cursor):
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
(左右滑动查看完整代码)
注:先关游标,再关连接
三、创建数据表
创建数据表,即执行数据库表的sql
def create_table(self, sql):
conn, cursor = self.connect
cursor.execute(sql)
self.connect_close(conn, cursor)
(左右滑动查看完整代码)
调用执行:
users_sqls = '''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
score DOUBLE
);
'''
create_table(users_sqls)
(左右滑动查看完整代码)
结果:
四、插入【insert】
为了方便,我们将插入分为单数据插入和批量插入
# 插入单条数据
def insert(self, sql):
conn, cursor = self.connect
try:
row_count = cursor.execute(sql).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
# 批量插入多条数据
def insert_many(self, sql, values):
conn, cursor = self.connect
try:
row_count = cursor.executemany(sql, values).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
(左右滑动查看完整代码)
调用执行:
# 插入单条数据
insert_sql = f"INSERT INTO users (name, age, score) VALUES ('Alice', 25, 60.65)"
insert_count = insert(sql=insert_sql)
print("单条插入", insert_count, "条数据!")
# 插入多条数据
sql = f'INSERT INTO users (name, age, score) VALUES (?, ?, ?)'
insert_counts = insert_many(sql, [('Lim', 20, 61.89), ('Kurt', 23, 50.01), ('Tom', 34, 67.89), ('Nics', 26, 52.01)])
print("批量插入", insert_counts, "条数据!")
(左右滑动查看完整代码)
结果:
五、更新【update】
为了方便,我们将更新分为单数据更新和批量更新
# 单数据更新
def update(self, sql):
conn, cursor = self.connect
try:
row_count = cursor.execute(sql).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
# 批量更新
def update_many(self, sql, values):
conn, cursor = self.connect
try:
row_count = cursor.executemany(sql, values).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
(左右滑动查看完整代码)
调用执行:
# 单数据更新
sql = f"UPDATE users SET `name` = 'Mikey' WHERE id = 2"
result = update(sql)
print("单条更新", result, "条数据!")
# 批量更新
sql = f'UPDATE users SET `name` = ? WHERE id = ?'
result = update_many(sql, [('Carry', 3), ('Tiya', 4)])
print("批量更新", result, "条数据!")
(左右滑动查看完整代码)
结果:
六、查询【select】
为了方便,我们将分为单条数据查询、所有数据查询和自定义查询数据
# 查询单条数据
def select(self, sql):
conn, cursor = self.connect
try:
cursor.execute(sql)
row_data = cursor.fetchone()
finally:
self.connect_close(conn, cursor)
return row_data
# 查询所有数据
def select_many(self, sql):
conn, cursor = self.connect
try:
cursor.execute(sql)
row_data = cursor.fetchall()
finally:
self.connect_close(conn, cursor)
return row_data
# 自定义查询前xxx条数据
def select_define_data(self, sql, num):
conn, cursor = self.connect
try:
cursor.execute(sql)
result = cursor.fetchmany(num)
finally:
self.connect_close(conn, cursor)
return result
(左右滑动查看完整代码)
调用执行:
# 查询单条数据
sql = f'SELECT * FROM users WHERE id = 3'
result = select(sql)
print("查询单条数据:", result)
# 查询score>60的所有数据
sql = f'SELECT * FROM users WHERE score > 60'
result = select_many(sql)
print("查询score>60的所有数据:", result)
# 查询score>60前两条数据
sql = f'SELECT * FROM users WHERE score > 2'
result = select_define_data(sql, 2)
print("查询score>60前两条数据:", result)
(左右滑动查看完整代码)
结果:
七、删除【delete】
为了方便,我们将分为单条数据删除 和 批量删除
# # 删除单条数据
def delete(self, sql):
conn, cursor = self.connect
try:
row_count = cursor.execute(sql).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
# 批量删除数据
def delete_many(self, sql, values):
conn, cursor = self.connect
try:
row_count = cursor.executemany(sql, values).rowcount
conn.commit()
except:
row_count = 0
conn.rollback()
finally:
self.connect_close(conn, cursor)
return row_count
(左右滑动查看完整代码)
调用执行:
# 删除单条数据
sql = f'DELETE FROM users WHERE id = 1'
delete_count = delete(sql)
print("单条删除", delete_count, "条数据!")
# 批量删除
sql = f'DELETE FROM users WHERE id = ?'
delete_counts = delete_many(sql, [(3,), (4,)])
print("批量删除", delete_counts, "条数据!")
(左右滑动查看完整代码)
结果:
八、总结
以上增、删、改使用的方式,大同小异,在使用中建议根据数据量的大小选择相应的操作方法。
至于查询 ,关键在于查询的sql语句,尽量不要select * 来查询所有。
小栈整体封装了一下,方便使用:
有需求的朋友可自取哟
获取:后台回复"sqlite"即可!
文章就分享到这儿,喜欢就点个赞吧!