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))

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

相关推荐
lzjava20245 分钟前
Python的函数
开发语言·python
审判长烧鸡20 分钟前
PostgreSQL之索引/函数/触发器
数据库·postgresql·触发器·函数·索引
Data_Journal24 分钟前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
Awesome Baron38 分钟前
skill、tool calling、MCP区别
开发语言·人工智能·python
Python私教1 小时前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
测试员周周1 小时前
【AI测试系统】第4篇:告别硬编码!基于 Markdown + Python 的 Skill 引擎设计:让 AI 测试系统拥有无限扩展的“灵魂”
人工智能·python·测试
武帝为此1 小时前
【Selenium 屏幕截图】
python·selenium·测试工具
byoass1 小时前
企业云盘与设计软件深度集成:AutoCAD/Revit/SolidWorks插件开发与API集成实战
服务器·网络·数据库·安全·oracle·云计算
念恒123062 小时前
Python(列表进阶)
python·学习
爬山算法2 小时前
MongoDB(113)如何使用第三方工具进行MongoDB监控?
数据库·mongodb