程序设计实训 - 题目 19 实现数据库的操作

2019301248-侯星宇 2022夏-程序设计实训 2022-07-29 23:41:17

程序设计实训 - Python

题目 19

img

img

思路分析

SQLite 是一种用 C 语言写的轻量级嵌入式数据库,它的数据库就是一个文件。SQLite 不需要一个单独的服务器进程或操作的系统,不需要配置,这意味着不需要安装或管理,所有的维护都来自于 SQLite 软件本身

1. 导入 sqlite3 模块

sqlite3 是内置模块,不需要安装,直接 import 导入即可:

import sqlite3

2. 创建与 SQLite 数据库的连接

使用 sqlite3.connect() 函数连接数据库,返回一个 Connection 对象,我们就是通过这个对象与数据库进行交互。如果该数据库文件不存在,那么它会被自动创建。

# 创建与数据库的连接
conn = sqlite3.connect(path)

建立与数据库的连接后,需要创建一个游标 cursor 对象,该对象的 .execute() 方法可以执行 sql 命令,让我们能够进行数据操作。

#创建一个游标 cursor
cur = conn.cursor()

3. 在 SQLite 数据库中创建表

使用 cur.execute(sql) 完成创建,主要的创建内容在 sql 语句中

4. 常用方法

  • sqlite3.connect(database [,timeout ,other optional arguments]) --- 该 API 打开一个到 SQLite 数据库文件 database 的链接。如果给定的数据库名称 filename 不存在,则该调用将创建一个数据库。
  • cursor.execute(sql [, optional parameters]) --- 该例程执行一个 SQL 语句
  • connection.cursor() --- 创建一个 cursor,在 Python 数据库编程中用到
  • connection.commit() --- 该方法提交当前的事务
  • connection.close() --- 该方法关闭数据库连接。请注意,这不会自动调用 commit()。如果之前未调用 commit() 方法,就直接关闭数据库连接,所做的所有更改将全部丢失

代码实现

# NPU 程序设计实训 HW19 实现数据库的操作
# 函数 ()
import sqlite3
path = 'D:/python project test/19_test.db'

# 1,初始化数据库
def create_db(path):

    # 创建与数据库的连接
    conn = sqlite3.connect(path)
    # 创建一个游标 cursor
    cur = conn.cursor()

    # 创建 person 表
    person_table = """ CREATE TABLE Persons(
                        NAME VARCHAR(32) NOT NULL,
                        GENDER VARCHAR(2) NOT NULL,
                        BIRTH VARCHAR NOT NULL,
                        ID VARCHAR(18) PRIMARY KEY NOT NULL,
                        FOREIGN KEY (POSITIONID) REFERENCES Position(POSITIONID)
                        );"""
    # 创建 position 表
    position_table = """ CREATE TABLE Position(
                        POSITIONID VARCHAR  PRIMARY KEY,
                        SALARY     INTEGER    NOT NULL
                        );"""
    # position 表插入数据
    position_table_insert = 'insert into Position values(?,?);'

    # 建立两个表
    try:
        cur.execute(position_table)
        cur.execute(person_table)
        cur.executemany(position_table_insert, [('A', 10000), ('B', 6000), ('C', 3000), ('D', 1000)])
        conn.commit()
    except Exception as e:
        print(e)
        return -1
    else:
        return 0
    finally:
        cur.close()
        conn.close()

# 2,新进人员
def new_employee(person, level):
    # 创建链接和游标
    conn = sqlite3.connect(path)
    cur = conn.cursor()

    new_person = """INSERT INTO PERSON VALUES (?,?,?,?,?);"""
    try:
        cur.execute(new_person, person+(level,))
        conn.commit()
    except Exception as e:
        print(e)
        return -1
    else:
        return 0
    finally:
        cur.close()
        conn.close()

# 3,删除人员
def delete_employee(person):
    conn = sqlite3.connect(path)
    cur = conn.cursor()

    delete_person = f'DELETE FROM Person WHERE ID={person};'
    try:
        cur.execute(delete_person)
        conn.commit()
    except Exception as e:
        print(e)
        return -1
    else:
        return 0
    finally:
        cur.close()
        conn.close()


# 4. 设置岗位薪水
def set_level_salary(level, salary):
    if level not in ['A', 'B', 'C', 'D'] or not isinstance(salary, int):
        return -1
    conn = sqlite3.connect(path)
    cur = conn.cursor()

    sql = f'UPDATE Position SET SALARY={salary} WHERE POSITIONID="{level}";'
    try:
        cur.execute(sql)
        conn.commit()
    except Exception as e:
        print(e)
        return -1
    else:
        return 0
    finally:
        cur.close()
        conn.close()


# 5. 统计薪水开支
def get_total_salary():
    conn = sqlite3.connect(path)
    cur = conn.cursor()

    select = """SELECT SALARY FROM Person,Position WHERE Person.POSITIONID = Position.POSITIONID;"""
    try:
        cur.execute(select)
        ret = cur.fetchall()
    except Exception as e:
        print(e)
        return -1
    else:
        return sum([i[0] for i in ret])
    finally:
        cur.close()
        conn.close()

...全文
763 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文研究了一种针对四机并联孤岛微电网的协同控制策略,通过集成DoS攻击模拟、分布式二次控制、下垂控制与事件触发式负荷控制,旨在实现微电网在遭受网络安全威胁等异常工况下的电压与频率恢复以及有功/无功功率的精确共享分配。基于Simulink平台构建了完整的微电网仿真系统,包含多台分布式发电单元(DG),采用下垂控制实现无需通信的功率自主分配,并引入分布式二次控制以补偿由下垂特性引起的电压和频率偏差,从而提升电能质量。为进一步降低通信负担并提高系统效率,设计了事件触发机制,仅在必要时刻进行信息交互。研究重点在于多时间尺度下的协同控制架构设计,全面验证了该策略在正常运行与遭受DoS攻击等扰动情形下的稳定性、鲁棒性与恢复能力。; 适合人群:具备电力系统、自动控制理论基础,熟悉Simulink/Matlab仿真工具,从事微电网、分布式能源、智能电网及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究孤岛微电网中电压频率恢复与功率均分的多时间尺度协同控制机制;②分析DoS网络攻击对微电网控制性能的影响及其应对策略;③掌握事件触发控制在减少通信开销中的实际应用方法;④复现并拓展具备网络安全防护能力的高级微电网控制算法仿真模型。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者结合现代控制理论与网络安全知识,逐步搭建系统模型,重点关注控制器参数整定、事件触发阈值设计及DoS攻击注入方式,通过对比实验深入理解控制策略的有效性与鲁棒性。

34

社区成员

发帖
与我相关
我的任务
社区描述
依托实践实训环节,为同学们更好掌握所需的基本技能,提供一个交流学习的社区。
python安全linux 高校
社区管理员
  • shawn904
  • weixin_44003872
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧