nicegui中多次调用数据库操作总结

如果你的程序中 需要多次调用数据库操作(比如多个函数都要查用户、插日志、更新状态等),不要复用同一个游标或连接,而是采用 "每次操作都新建连接 + 使用 with" 的模式,并通过封装工具函数来避免重复代码。

python 复制代码
import sqlite3



CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))  # 获取当前脚本所在目录的绝对路径
DB_DIR = os.path.join(CURRENT_DIR, 'shujulu')             # 定义数据库文件夹路径为当前目录下的 'shujulu'
os.makedirs(DB_DIR, exist_ok=True)                        # 创建数据库目录(如果不存在)
DATABASE = os.path.join(DB_DIR, 'shujulu_02.db')              # 定义数据库文件完整路径






def db_execute(query, params=(), fetch=False):
    """
    执行 SQL 语句
    :param query: SQL 语句(带 ? 占位符)
    :param params: 参数元组
    :param fetch: 是否返回查询结果(SELECT 用 True,INSERT/UPDATE 用 False)
    :return: 如果 fetch=True,返回查询结果;否则返回 None
    """
    with sqlite3.connect(DATABASE) as conn:
        cursor = conn.cursor()
        cursor.execute(query, params)
        if fetch:
            return cursor.fetchall()
        # 否则自动 commit(with 退出时)

调用函数

python 复制代码
# 新建数据库--表
def init_db():
    # 使用 IF NOT EXISTS 避免重复创建报错
	db_execute('''
        CREATE TABLE IF NOT EXISTS user (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            userid TEXT UNIQUE NOT NULL,
            password TEXT NOT NULL,
            role TEXT,
            userid_ TEXT,
            password_ TEXT
        )
    ''')

    # 可以继续创建其他表




# 插入用户
def insert_user(userid, password, role, userid_, password_):
    db_execute(
        'INSERT INTO user (userid, password, role, userid_, password_) VALUES (?, ?, ?, ?, ?)',
        (userid, password, role, userid_, password_)
    )

# 查询用户
def get_user(userid):
    rows = db_execute('SELECT * FROM user WHERE userid = ?', (userid,), fetch=True)
    return rows[0] if rows else None

# 更新密码
def update_password(userid, new_pass):
    db_execute('UPDATE user SET password = ? WHERE userid = ?', (new_pass, userid))

仅供参考和研究。学习交流!!!

相关推荐
缓慢更新7 分钟前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
AI小百科12 分钟前
向量数据库:AI 的「记忆仓库」是怎么工作的
数据库·人工智能·oracle
煎饼皮皮侠33 分钟前
【设计】设计一个Web版数据库管理平台(之七):多数据库类型易扩展
数据库
Nturmoils36 分钟前
MongoDB迁移之后,Spring Data 和 Hibernate 各自接哪类请求
数据库
画中有画44 分钟前
在自动化脚本中操作本地数据库
数据库·oracle·自动化
Decay__1 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
太理摆烂哥1 小时前
MySQL用户管理
数据库·mysql
专注仿真2 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放2 小时前
Python基础语法练习题(75)
开发语言·python·学习
梦影_3 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database