Day37.数据库的几个重要概念

day37-Django(3) Django ORM模型层学习摘要 Django ORM通过定义模型类映射数据库表,实现对象关系映射(ORM)。ORM优点包括代码重用性高、自动完成数据库操作、强制MVC架构等,但也存在学习成本高、复杂查询性能差等缺点。使用步骤:1)配置数据库连接;2)定义模型类;3)生成迁移文件;4)执行数据库操作。 配置MySQL需安装PyMySQL驱动,并在__init__.py中初始化。模型类须继承models.Model,可通过Meta类设置表名、主键等属性。字段定义使用models.Field类型,支持常见约束 阅读详情

数据库的几个重要概念



前言

本文主要是展示了数据库的几个重要的概念。


一. 重要的概念

1.1 范式理论 - 设计二维表的指导思想

  1. 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。
  2. 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。
  3. 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。

1.2 数据完整性

  1. 实体完整性 - 每个实体都是独一无二的

    • 主键(primary key) / 唯一约束 / 唯一索引(unique)
  2. 引用完整性(参照完整性)- 关系中不允许引用不存在的实体

    • 外键(foreign key)
  3. 域完整性 - 数据是有效的

    • 数据类型及长度

    • 非空约束(not null)

    • 默认值约束(default)

    • 检查约束(check)

      说明:在MySQL数据库中,检查约束并不起作用。

1.3 MySQL中的事务操作

  • 开启事务环境

    start transaction
    

    或

    begin
    
  • 提交事务

    commit
    
  • 回滚事务

    rollback
    

二. 补充内容

大家应该能够想到,关于MySQL的知识肯定远远不止上面列出的这些,比如MySQL的性能优化、管理和维护MySQL的相关工具、MySQL数据的备份和恢复、监控MySQL、部署高可用架构等问题我们在这里都没有进行讨论。当然,这些内容也都是跟项目开发密切相关的,我们就留到后续的章节中再续点进行讲解。

Python数据库编程

我们用如下所示的数据库来演示在Python中如何访问MySQL数据库。

drop database if exists hrs;
create database hrs default charset utf8;

use hrs;

drop table if exists tb_emp;
drop table if exists tb_dept;

create table tb_dept
(
dno   int not null comment '编号',
dname varchar(10) not null comment '名称',
dloc  varchar(20) not null comment '所在地',
primary key (dno)
);

insert into tb_dept values 
	(10, '会计部', '北京'),
	(20, '研发部', '成都'),
	(30, '销售部', '重庆'),
	(40, '运维部', '深圳');

create table tb_emp
(
eno   int not null comment '员工编号',
ename varchar(20) not null comment '员工姓名',
job   varchar(20) not null comment '员工职位',
mgr   int comment '主管编号',
sal   int not null comment '员工月薪',
comm  int comment '每月补贴',
dno   int comment '所在部门编号',
primary key (eno)
);

alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno);

insert into tb_emp values 
	(7800, '张三丰', '总裁', null, 9000, 1200, 20),
	(2056, '乔峰', '分析师', 7800, 5000, 1500, 20),
	(3088, '李莫愁', '设计师', 2056, 3500, 800, 20),
	(3211, '张无忌', '程序员', 2056, 3200, null, 20),
	(3233, '丘处机', '程序员', 2056, 3400, null, 20),
	(3251, '张翠山', '程序员', 2056, 4000, null, 20),
	(5566, '宋远桥', '会计师', 7800, 4000, 1000, 10),
	(5234, '郭靖', '出纳', 5566, 2000, null, 10),
	(3344, '黄蓉', '销售主管', 7800, 3000, 800, 30),
	(1359, '胡一刀', '销售员', 3344, 1800, 200, 30),
	(4466, '苗人凤', '销售员', 3344, 2500, null, 30),
	(3244, '欧阳锋', '程序员', 3088, 3200, null, 20),
	(3577, '杨过', '会计', 5566, 2200, null, 10),
	(3588, '朱九真', '会计', 5566, 2500, null, 10);

在Python 3中,我们通常使用纯Python的三方库PyMySQL来访问MySQL数据库,它应该是目前Python操作MySQL数据库最好的选择。

  1. 安装PyMySQL。

    pip install pymysql
    
  2. 添加一个部门。

    import pymysql
    
    
    def main():
        no = int(input('编号: '))
        name = input('名字: ')
        loc = input('所在地: ')
        # 1. 创建数据库连接对象
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass')
        try:
            # 2. 通过连接对象获取游标
            with con.cursor() as cursor:
                # 3. 通过游标执行SQL并获得执行结果
                result = cursor.execute(
                    'insert into tb_dept values (%s, %s, %s)',
                    (no, name, loc)
                )
            if result == 1:
                print('添加成功!')
            # 4. 操作成功提交事务
            con.commit()
        finally:
            # 5. 关闭连接释放资源
            con.close()
    
    
    if __name__ == '__main__':
        main()
    
  3. 删除一个部门。

    import pymysql
    
    
    def main():
        no = int(input('编号: '))
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass',
                              autocommit=True)
        try:
            with con.cursor() as cursor:
                result = cursor.execute(
                    'delete from tb_dept where dno=%s',
                    (no, )
                )
            if result == 1:
                print('删除成功!')
        finally:
            con.close()
    
    
    if __name__ == '__main__':
        main()
    

    说明:如果不希望每次SQL操作之后手动提交或回滚事务,可以像上面的代码那样,在创建连接的时候多加一个名为autocommit的参数并将它的值设置为True,表示每次执行SQL之后自动提交。如果程序中不需要使用事务环境也不希望手动的提交或回滚就可以这么做。

  4. 更新一个部门。

    import pymysql
    
    
    def main():
        no = int(input('编号: '))
        name = input('名字: ')
        loc = input('所在地: ')
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass',
                              autocommit=True)
        try:
            with con.cursor() as cursor:
                result = cursor.execute(
                    'update tb_dept set dname=%s, dloc=%s where dno=%s',
                    (name, loc, no)
                )
            if result == 1:
                print('更新成功!')
        finally:
            con.close()
    
    
    if __name__ == '__main__':
        main()
    
  5. 查询所有部门。

    import pymysql
    from pymysql.cursors import DictCursor
    
    
    def main():
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass')
        try:
            with con.cursor(cursor=DictCursor) as cursor:
                cursor.execute('select dno as no, dname as name, dloc as loc from tb_dept')
                results = cursor.fetchall()
                print(results)
                print('编号\t名称\t\t所在地')
                for dept in results:
                    print(dept['no'], end='\t')
                    print(dept['name'], end='\t')
                    print(dept['loc'])
        finally:
            con.close()
    
    
    if __name__ == '__main__':
        main()
    
  6. 分页查询员工信息。

    import pymysql
    from pymysql.cursors import DictCursor
    
    
    class Emp(object):
    
        def __init__(self, no, name, job, sal):
            self.no = no
            self.name = name
            self.job = job
            self.sal = sal
    
        def __str__(self):
            return f'\n编号:{self.no}\n姓名:{self.name}\n职位:{self.job}\n月薪:{self.sal}\n'
    
    
    def main():
        page = int(input('页码: '))
        size = int(input('大小: '))
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass')
        try:
            with con.cursor() as cursor:
                cursor.execute(
                    'select eno as no, ename as name, job, sal from tb_emp limit %s,%s',
                    ((page - 1) * size, size)
                )
                for emp_tuple in cursor.fetchall():
                    emp = Emp(*emp_tuple)
                    print(emp)
        finally:
            con.close()
    
    
    if __name__ == '__main__':
        main()
    

总结

今天主要是学习了数据库的几个重要的概念。特别是数据库的设计以及数据的一些特性,简要操作。最后还学习了一个简单的数据库操作的例子,有利于理解今天所学的知识。

溜了遛了,脑壳疼。Loading(37/100)。。。

day37-TCP的并发(tcp_fork&&tcp_thread)| 数据库 vim中对齐:按v和=快速对齐:61,75d直接剪切,61-75行。 阅读详情

相关推荐

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.csdn.net/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

数据库重要概念的定义与理解

1.数据,数据库,数据库管理系统,数据库系统 数据:描述事物的符号记录称为数据。 形式具有很多,如:文本、图形、图像、音频、视频等等。几乎所有的数据都可以进行二进制化后存入计算机中。 数据库:数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并且可为各种用户共享。 数据库,顾名思义,存放数据...

jiesfriend的博客 1983

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

1. 数据库的四个基本概念

数据库的四个基本概念 数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的4个基本概念。 1). 数据(data) 描述事物的符号记录,譬如:数字、文字、图形、图像、音频、视频等,多种表现形式,均可以经过数字化存入计算机之中。 数据的表现形式还不能完全表达其内容,需要经过解释,数据的解释是指数据含义的说明,数据含义称为语义,数据与其语义是密不可分的。 2). 数据库(Data...

清锋的博客 9497

开源LocalAI本地人工智能安装教程

LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录

2301_78652552的博客 3614

EduCoder 计算机网络实验 IP协议分析

第1关:跟踪抓包 任务描述 相关知识 IPV4数据包 截获数据报 分析截获结果 使用git将本地文件推送到远程仓库永久保存 操作要求 任务描述 本关任务:使用 Ping 命令发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IPV4 地址的编址方法,加深对 IP 协议的理解。 相关知识 为了完成本关任务,你需要掌握: 截获数据报; 简单分析数据包格式。 IPV4数据包 网际协议第 4 版(Internet Protocol version 4

qq_41975868的博客 1万+

数据库基础重要概念

1、什么是参照完整性 设F是基本关系R的一个或者一组属性,但是不是关系R的码,是基本关系S的主码,如果F与相对应,则称F是R的外码(foreign key),并称基本关系R称为参照关系,基本关系S为被参照关系 外码并不一定要与相对应的苎麻同名,一般是取相同的名字(当属于不同的关系时) 2、参照完整性规则 参照完整性规则就是定义外码与主码之间的引用关系 若属性(或者属性组)F是基本关系R的外码,它与基本关系S的主码(基本关系R与S不一定是不同关系),则对于R中的每一个元组在F上的值必须: 或者

兮遥 3613

2026年7月19日 从可插拔到共封装:技术路线研究报告

AI 算力的爆发正在重写数据中心光互连的技术路线。本报告对当前并存的四代光互连架构——

weixin_51184047的博客 587

数据库基本概念

数据库管理系统是一个由互相关联的数据的集合和一组用访问这些数据的程序组成,这个数据集合通常称作数据库,其中包含了关于某个企业的信息。DBMS的主要目标就是提供一种可以方便高效的存取数据库信息的途径。相同格式和类型的数据统一存放在一起,而不会把"人”和"书"混在一起存储。这样,数据的存储就能够井然有序。 举例班级同学使用一些介质进行存储,例如文字存在文档中数据库可以完成数据持久化保存+快速提取数据如何保存:最外层是mysql服务—》mysql数据库—》数据表—》记录为行,字段为列—>数据保存在一行行记录中记录

qq_45088125的博客 4167

旋转矩阵推导

推导前提: 坐标使用右手坐标系,角度逆时针旋转为正。 绕X轴旋转角度为 俯仰角 即Pitch 绕Y轴旋转角度为 偏航角 即Yaw(Head) 绕Z轴旋转角度为 翻滚角 即Roll 一、平面二维坐标点的旋转 如右图所示,根据三角函数关系,可以列出向量OP与OP’的坐标表示形式: x = |OP|•cosα x′ = |OP|•cos(α+β) y = |OP|•sinα y′ = |OP|•sin(α+β) 将P′(x′,y′)表达式展开: x′ =

suixinger_lmh的随笔 1384

螺丝锁付系统软件设计 C# Winform

视觉螺丝锁付系统软件设计 C# Winform ,这是其中通信子模块设计

weixin_42522973的博客 340

【数据库原理 • 一】数据库系统概念

数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前互联网+与大数据,一切都建立在数据库之上,以数据说话,首先需要聚集数据、分析数据和管理数据,数据库技术已成为各种计算机系统的核心技术。数据库相关知识也已成为每个人必须掌握的知识。

Multis 2531

[QMT量化交易小白入门]-104、QMT平台运行深度学习模型,预测期货价格

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 484

Day 37 数据库基础1

目录 poll和epoll select的问题 poll和epoll 并发 数据库基础概念 数据库是什么: 为什么用数据库 数据库分类 数据库重要概念 安装数据库 ...

weixin_30692143的博客 105

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

韩顺平0基础学Java——第37天

p736-758

m0_50959806的博客 1090

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据库37天

数据库 总览 day1 介绍数据库\安装\基础的命令 day2 数据库的表操作 day3 数据库的数据操作,查询(单表\多表) day4 查询和其他内容的拾遗 day5 索引原理和python操作mysql 软件就是让频繁的人做的事情,交给机器去做了 ------- Eva-j day1 背景 数据库在开发的过程中占据着什么样的位置? 我们把数据存储在文件里 #写 wr...

weixin_30538029的博客 225

Day 37 数据库初识

数据库概念 那Mysql能干嘛呢?它就是一款软件,安装在任何一台计算机或者服务器上的时候,只要我告诉它创建一个文件,新增一个数据,删除一个数据它就能帮我去做想要的操作 那我们暂且能不能理解为mysql就是用来帮我们操作文件的! MySQL:用于管理文件的一个软件(两个程序) -服务端软件 -socket服务端 -本地文件操作 -解析指令 -客户端软件 -socket客...

weixin_30244681的博客 119

Python day37

Python day37 事务 事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执行,要么全部不执行。 为什么需要事务? 把一系列sql放入一个事务中有两个目的: 1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。 当一个事务被提交给了DBMS

weixin_50236464的博客 166

python-day37(MySQL数据库)

一. 库操作   1. 创建数据库     语法: create databas 数据库名 charset utf8;     数据库命名规则:       可以由数字,字母,下划线组成,@,#,$       区分大小写       唯一性       不能使用关键字如 create select       不能单独使用数字       最长128位       ...

banaoxue9848的博客 249

2021-02-26~27~28 大数据课程笔记 day37day38day39

@R星校长 音乐数据中心平台 1.1 数据库与ER建模 1.1.1 数据库(DataBase) 数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜,存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作,数据组织主要是面向事务处理任务。 1.1.2 数据库三范式 关系型数据库设计时,遵照一定的.

qq_44745905的博客 4019

day 37 数据库MySQL的进一步认识

一 . 数据库MySQL   第一天接触数据库,个人还是挺对这方面感兴趣的,然而也知道对日后工作也有很大的作用,所以一定要好好学。   数据库:可以看为是电子化的文件柜存储电子文件的处所,用户可以对文件中的数据进行新增,截取,更新,删除等操作,我们有一个数据管理系统我们称之为DBMS,DB(database)就是数据库的意义,M(manage)就是管理的意思,S(system)就是系统...

weixin_30867015的博客 106

Day37

Day37 一、反射作用:破解私有的属性,方法。 1、创建反射类型3种方法 1)Class clazz1 = Emp.class; 2)Class clazz2 = Class.forName(“com.hrbu.po.Emp”); 3)Class clazz3 = new Emp().getClass(); 2、获取内容–属性 获取不同属性的方法( 1)单个属性: 1)获取公有属性Field f...

weixin_44722333的博客 158

Day37_数据库、select

DBMS 数据库管理系统 DB 数据库(FILE) RDEMS 关系型数据库管理系统 RDB 关系型数据库 2.关系型数据库的代表 oracle 甲骨文 50% 版本: oracle9i oracle10g oracle11g db2 IBM 20% sqlserver 微软 15% 开源免费

但求有朝一日,风起云涌,笑看苍穹 920

DAY 37 MySQL安装配置及sql语句基础

内容大纲 1、数据库概念 2、MySQL介绍 3、MySQL的安装 4、安装后续处操作 5、基本SQL语句 6、存储引擎 一、数据库概念 数据库:DataBase,简称DB 数据库就是存放数据的仓库,支持共享数据,增删改查数据的功能 数据库管理系统:DataBase Management System 简称DBMS 数据库管理系统就是可以帮我们管理、处理数据的软件 ...

dicang2587的博客 97

day37-实时同步

1.该命令,在大量文件生成的时候,需要检测,性能会骤然下降,以及会丢失数据,有部分的文件,会无法被检测到,也就是无法被后续的动作抓取到适用于数据量不大的情况下,你用也没问题,以及对数据。

hcb20010421的博客 841
上一篇: Day36.SQL详解
下一篇: Day38.NoSQL数据库入门
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值