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

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

相关推荐
weixin_523185321 分钟前
Spring事务为什么会失效?常见场景与解决方案总结
java·数据库·spring
2501_928945522 分钟前
命题GTFE-1:修正爱因斯坦场方程的张量形式推导
python
SilentSamsara3 分钟前
LLM API 工程化:OpenAI/DeepSeek/国产模型统一调用层设计
开发语言·人工智能·python
云絮.3 分钟前
数据库约束
java·数据库·sql·mysql·oracle
Wonderful U13 分钟前
Python+Django实战|社区物业管理系统:业主档案、车位管理、物业费收缴、线上报修、投诉建议、园区公告、日常巡检
android·python·django
cui_ruicheng8 小时前
MySQL(四):数据类型与字段设计
数据库·mysql
皮皮学姐分享-ppx9 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
珺毅同学9 小时前
YOLO生成预测json标签迁移问题
python·yolo·json
骑士雄师9 小时前
18.4 长期记忆可修改版
python
~小先生~10 小时前
Python从入门到放弃(一)
开发语言·python