算某人文件总大小

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:open_db() 建一个内存 SQLite 库、含 users / notes / files 三张表、交回连接;执行 SQL 用 conn.execute(SQL, 参数元组),取一行用 .fetchone()、取全部用 .fetchall()、新行主键用 .lastrowid。判题机自带 sqlite3。)

(这一节还有:save_file 存一条文件元数据(谁传的/文件名/多大,文件本身不进库)、list_names 取某人全部文件名、total_size 求总大小。)

存两条、求总大小;再问一个没传过文件的人:

import sqlite3


def open_db():
    """建一个内存 SQLite 库,含 users / notes / files 三张表,交回连接。"""
    conn = sqlite3.connect(":memory:")
    conn.execute("CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT UNIQUE, pw TEXT)")
    conn.execute("CREATE TABLE notes(id INTEGER PRIMARY KEY, uid INTEGER, text TEXT)")
    conn.execute("CREATE TABLE files(id INTEGER PRIMARY KEY, uid INTEGER, name TEXT, size INTEGER)")
    return conn


def save_file(conn, uid, name, size):
    """存一条文件元数据(谁传的、文件名、多大),文件本身不进库。交回新 id。"""
    cur = conn.execute("INSERT INTO files(uid, name, size) VALUES(?, ?, ?)", (uid, name, size))
    return cur.lastrowid


def list_names(conn, uid):
    """按 id 顺序交回某人传过的所有文件名。"""
    return [r[0] for r in conn.execute("SELECT name FROM files WHERE uid=? ORDER BY id", (uid,))]


def total_size(conn, uid):
    """交回某人所有文件的总大小(一个都没有交回 0)。"""
    row = conn.execute("SELECT COALESCE(SUM(size), 0) FROM files WHERE uid=?", (uid,)).fetchone()
    return row[0]

c = open_db()
save_file(c, 1, "a", 10); save_file(c, 1, "b", 20)
print(str(total_size(c, 1)) + "/" + str(total_size(c, 9)))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论