数据层只管数

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

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

(这一节还有:数据访问层 repo_add / repo_count 只碰库;业务层 post_note 先校验正文再调数据层。)

用数据层直接插两条、再数一数:

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 repo_add(conn, uid, text):
    """数据访问层:只管把一条留言写进库,交回新 id。"""
    cur = conn.execute("INSERT INTO notes(uid, text) VALUES(?, ?)", (uid, text))
    return cur.lastrowid


def repo_count(conn, uid):
    """数据访问层:只管数某人有几条。"""
    return conn.execute("SELECT COUNT(*) FROM notes WHERE uid=?", (uid,)).fetchone()[0]


def post_note(conn, uid, text):
    """业务层:先判正文非空且不超长,通过才调数据层落库。交回新 id 或 None。"""
    if not (0 < len(text) <= 200):
        return None
    return repo_add(conn, uid, text)

c = open_db()
repo_add(c, 5, "a"); repo_add(c, 5, "b")
print(repo_count(c, 5))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论