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

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

相关推荐
吴佳浩1 小时前
GPU 编号进阶:CUDA\_VISIBLE\_DEVICES、多进程与容器化陷阱
人工智能·pytorch·python
哆啦A梦15881 小时前
Springboot整合MyBatis实现数据库操作
数据库·spring boot·mybatis
全栈凯哥1 小时前
18.Python中的导入类完全指南
python
Zzzzmo_2 小时前
【MySQL】JDBC(含settings.xml文件配置/配置国内镜像以及pom.xml文件修改)
数据库·mysql
sunwenjian8862 小时前
Java进阶——IO 流
java·开发语言·python
guts3502 小时前
图像篡改数据集下载:COVERAGE、CASIA
python·数据集
森林猿3 小时前
java-modbus-读取-modbus4j
java·网络·python
FirstFrost --sy3 小时前
MySQL内置函数
数据库·mysql
2401_879693873 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
reembarkation3 小时前
光标在a-select,鼠标已经移出,下拉框跟随页面滚动
java·数据库·sql