Python进阶-数据库编程-03

Python进阶系列
Python进阶-网络编程-01
Python进阶-网络编程-02
Python进阶-网络编程-03
Python进阶-多任务编程-01
Python进阶-多任务编程-02
Python进阶-多任务编程-03
Python进阶-正则表达式
Python进阶-数据库编程-01
Python进阶-数据库编程-02
Python进阶-数据库编程-03
Python进阶-数据库编程-04
Python进阶-数据拷贝问题
Python进阶-模块导入问题
Python进阶-miniWeb框架

12.1. 外键使用

  • 外键的概念:一个表的主键在另外一个表中出现,在另外一个表中称为外键

  • 作用:表间的数据插入、更新时候的一种约束

  • 创建外键

    • 已经存在的表建立外键:

      alter table 表名 add foreign key(当前表的字段) references 表名(字段)
      
    • 创建表的时候创建外键:

      create table good_test(
           id int primary key auto_increment,
           name varchar(150) not null,
           cate_id int unsigned not null,
           brand_id int unsigned not null,
           -- 创建外键
         foreign key(cate_id) references goods_cates(id),
           foreign key(brand_id) references goods_brands(id)
           );
      
  • 删除外键

    • 查看外键名称:show create table 表名;

      alter table 表名 drop foreign key 外键名;
      

12.2. 视图的概念和使用

  • 概念:虚拟表,仅仅支持查询,把复杂的SQL语句的功能封装成一个虚表

  • 创建视图

    create view 视图名 as select …
    

    注意:v_开头

  • 查询视图

    show tables;
    
  • 使用视图

    视图只能用来查询,查询时和使用普通表效果一致

    select * from v_goods_info; 
    
  • 删除视图

    drop view 视图名;
    

12.3. 事务的概念及特性

  • 事务概念:事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作
  • 作用:要么完全地执行,要么完全地都不执行
  • 事务的特性ACID:
    • A原子性:事务的操作是原子的,不能分隔
    • C一致性:双方的结果要一致
    • I 隔离性:同一时间只有一个事务在操作
    • D持久性:操作完成结果持久不变

12.4. 事务使用

  • 步骤

    1. 开启事务:begin;

    2. 操作数据库:insert update delete

    3. 确认修改:commit;

    4. 回滚:rollback;


12.5. 验证事务的ACID特性

  • commit;

    客户端A更新数据

    客户端B查询

    如果A不commit B看到的必然是老数据

  • rollback;

  • 验证隔离性:同一时间修改同一个字段


12.6. 数据库三范式

  • 范式:设计数据库的一些原则
  • 数据库设计的3范式
    • 1NF 字段必须是原子的,不可分割
    • 2NF 满足1NF,必须要有主键,非主键字段必须完全依赖主键,而不能部分依赖
    • 3NF 满足2NF,所有非主键字段必须依赖主键,不能存在传递依赖的情况

12.7. E-R模型及表间关系

  • 表间关系
    • 一对一:一个表中的一条数据,能够和另外一个表的唯一一条数据对应(人和常住地址)
    • 一对多:一个表中的一条数据,能够和另外一个表的多条数据对应(一个班有多个学生)
    • 多对多:一个表中的一条数据,能够和另外一个表的多条数据对应,相反也成立。(学生和课程)

12.8. Python连接MySQL

  • 作用:使用python代码充当客户端,连接数据库进行操作

  • 步骤

    1. 导入模块 pymysql

      import pymysql
      
    2. 建立连接对象 pymysql.connect()

      # host  主机
      # user  用户名
      # password 密码
      # database  指定数据库
      conn=pymysql.connect(host='localhost',user='root',password='107314',database='jing_dong',charset='utf8')
      
    3. 创建游标对象 conn.cursor()

      cur = conn.cursor()
      
    4. 使用游标对象执行SQL语句

      # 查询goods表中的所有信息,按照倒序排序
      result = cur.execute("select * from goods order by id desc")
      # result返回查询的数据条数
      print("查询的数据条数为:%s" % result)
      
    5. 获取执行的结果

      # 获取所有数据,返回的是元组类型
      result_list = cur.fetchall()
      
      # 获取一条数据
      result_list = cur.fetchone()
      
    6. 打印输出获取的内容

      print(result_list)
      
    7. 关闭游标对象

      cur.close()
      
    8. 关闭连接对象

      conn.close()
      
  • 代码实例:

    # 1.导入模块
    import pymysql
    
    # 2.建立连接对象 pymysql.connect()
    conn=pymysql.connect(host='localhost',user='root',password='107314',database='jing_dong',charset='utf8')
    
    # 3.创建游标对象
    cur = conn.cursor()
    
    # 4.使用游标对象执行SQL语句
    result = cur.execute("select * from goods order by id desc")
    print("查询的数据条数为:%s" % result)
    
    # 5.获取执行的结果
    # 获取一条数据
    result_list = cur.fetchone()
    
    # 6.打印输出获取的内容
    print(result_list)
    
    # 7.关闭游标对象
    cur.close()
    
    # 8.关闭连接对象
    conn.close()
    

12.9. Python操作数据库CURD

  • 操作步骤

    1. 导入模块 pymysql

    2. 建立连接对象 pymysql.connect()

    3. 创建游标对象

    4. 使用游标对象执行SQL语句 execute()

    5. 提交 conn.commit()

    6. 获取执行的结果(影响的行数)并打印执行的结果

    7. 关闭游标对象

    8. 关闭连接对象


12.10. SQL防注入

  • 防注入的思路

    • sql中需要变化的地方,可以占位符%s %d……

      sql = "select * from goods where name = %s order by id desc"
      

      注意:SQL可以出现多个占位符,后续列表中的元素要与之对应

    • 把参数封装到列表中

      params = [input_name]
      
    • 把列表传递给excute(sql,列表)

      result = cur.execute(sql,params)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值