zoukankan      html  css  js  c++  java
  • PymySQL

    一,mysql基础

    关于mysql的操作,可以参考下面的博客。http://www.cnblogs.com/wupeiqi/articles/5699254.html

    除了对mysql的CURD操作以外【创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作)】
    还要注意几个点:

    1,自增列

    自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列
    auto_increment

     

    2,主键(相当于书的目录) primary key

    3,外键 foreign key (另外一张表里面的键,为了进行更好的关联,进行表与表的一一对应)
      比如两张资源表分别为:
      T1,(id, 服务器/防火墙, 价格)
      T2, (1(服务器)/2(防火墙),厂商)
    此时就可以在T1中增加一个外键,分别把服务器和防火墙替换成1和2。因为在T2表中,1表示服务器,2表示防火墙
    另外一点使用外键需要注意:外键具有约束性。即不能在T1中有1和2的那一列增加3,因为T2中也没有3,否则会报错!


    4,区别:一对多,多对多(表与表之间的关联)
      如果用到一对多,其中外键就可以做到。如果用到了多对多,最合理的设计应该是建立第三表专门保存对应关系。



    5,连表操作
      简单粗暴的连表
      inner join
      left join
      right join

    例1.
    select * from t10 left join t11 on t10.type_id = t11.id

    他们之间的区别就是:
    inner join只把相关联的列出来。
    left join是以左边为主,把相关联的列出来,如果左边有其他无关的数据,也会列出来,并置为None
    right join和left join相反。

    union 对多个表进行拼接。
    注意:union默认会自动去重。如果不想让其自动去重,则需要用Union all

    二,pymysql

    MySQLdb是在python2时一个处理mysql的模块,和pymsql类似

    安装:

    pip3 install pymysql

    1,pymysql简单的操作

    import pymysql
    
    # 创建连接
    conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13')
    # 创建游标
    cursor = conn.cursor()
    
    # 执行SQL,并返回收影响行数
    effect_row = cursor.execute("update hosts set host = '1.1.1.2'")
    
    # 执行SQL,并返回受影响行数
    # effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))
    
    # 执行SQL,并返回受影响行数
    # effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
    # 可以进行多行的修改
    
    # 提交,不然无法保存新建或者修改的数据,这一步至关重要可以把内存中数据更新到数据库
    conn.commit()
    
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()
    

      

    2,获取新创建数据自增ID

    import pymysql
    
    conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13')
    cursor = conn.cursor()
    cursor.executemany("insert into t5(name, price)values(%s,%s)", [("server4", 21000), ("server5", 15000)])
    conn.commit()
    cursor.close()
    conn.close()
    
    # 获取最新自增ID
    new_id = cursor.lastrowid
    print(new_id)
    

      

    3,获取查询数据

    import pymysql
    
    conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13')
    cursor = conn.cursor()
    cursor.execute("select * from t5")
    
    # 获取第一行数据
    # row_1 = cursor.fetchone()
    
    # 获取前n行数据
    # row_2 = cursor.fetchmany(3)
    # 获取所有数据
    row_3 = cursor.fetchall()
    
    conn.commit()
    cursor.close()
    conn.close()
    print(row_3)
    
    注意:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
    
    cursor.scroll(1,mode='relative')  # 相对当前位置移动
    cursor.scroll(2,mode='absolute') # 相对绝对位置移动
    
    这点和读取文件类似,如果执行两遍读取第一行,那么实际上第一次读取的是第一行,第二次是紧接着第一次读取的下一行。
    

      

    4,fetch数据类型
    fetch查询默认读取的数据类型为元组,有时候不太好辨认。这时可以修改输出为字典。

    import pymysql
    
    conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13')
    
    # 游标设置为字典类型
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    r = cursor.execute("select * from t1;")
    
    result = cursor.fetchone()
    
    conn.commit()
    cursor.close()
    conn.close()
    print(result)
    

      

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6648195.html
Copyright © 2011-2022 走看看