Python对Sqlite数据库的增、删、改、查操作,独立封装版

文摘   科技   2023-12-20 18:55   北京  


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"即可!


     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章