• Day10


    IO多路复用:
    参考博客:http://www.cnblogs.com/wupeiqi/p/6536518.html
     
    socket客户端(爬虫):
    http://www.cnblogs.com/wupeiqi/articles/6229292.html
     
    paramiko:
    http://www.cnblogs.com/wupeiqi/articles/5095821.html
     
     
    MySQL语句的测试题:
    题目:http://www.cnblogs.com/wupeiqi/articles/5729934.html 
    答案:http://www.cnblogs.com/wupeiqi/articles/5748496.html 
    特别提醒:答案里有错误的哈。 
     
    数据库相关操作:
    http://www.cnblogs.com/wupeiqi/articles/5713315.html
    http://www.cnblogs.com/wupeiqi/articles/5713323.html
     
    http://www.cnblogs.com/wupeiqi/articles/5713330.html
     
     
    alex课件: 

    python 之路,Day11 - python mysql and ORM

    课堂笔记:

      1. IO多路复用
      2. paramiko
      3. MySQL
        - SQL语句
        - Python操作MySQL - pymysql模块

    作业:主机管理

    上节回顾:
      - 线程
        - 锁
        - 池
      - 进程
        - 锁
        - 池
        - 数据共享

      - 协程
        - 对线程的分片(微线程)

      - IO多路复用

        r,w,e = select.select([socket对象,...],[],[],1)

        - 同时监听多个socket对象,是否:可读、可写、异常


    今日内容:
      1. IO多路复用
        - 监听多个socket变化


        - socket服务端
    IO多路复用 + socket 来实现Web服务器
    a. 服务端优先运行
    b. 浏览器: http://......
    socket + send('协议..')
    c. 获取客户端发来的url,根据URL不同响应数据
    d. 断开链接
    产出:
    a. 浏览器发送数据:按照指定规则
    b. 监听多个socket对象
    c.
    Web框架开发者
    业务开发者
    d. 模块独立化

    参考博客:http://www.cnblogs.com/wupeiqi/p/6536518.html
    - socket客户端(爬虫)
    利用一个线程,同时发送n个请求(异步非阻塞模块)

    url_list [
    http://www.baidu.com,
    http://www.baidu1.com,
    http://www.baidu2.com,
    http://www.baidu3.com,

    ]
    a. 循环列表,为每一个URL生成Socket对象
    b. 每一个socket对象,向远程发送链接请求
    connect: 阻塞
    c. 如果连接:
    发送数据:遵循格式
    d. 获取响应内容
    e. 关闭

    注意:可读和可写状态

    参考博客:http://www.cnblogs.com/wupeiqi/articles/6229292.html

    产出:
    1. setblockint(False)
    2. select监听其他对象: def fileno():...
    3. gevent,twisted,asycio ---> 单线程并发发送Http请求

    2. Paramiko
    参考博客:http://www.cnblogs.com/wupeiqi/articles/5095821.html
    - 是一个模块,socket,SSH
    - Python代码,实现远程服务器操作

    功能:
    a. 使用用户名密码:
    - 命令 SSHClient -> Transport
    - 文件 Transport
    b. 使用用户名秘钥:
    - 命令 SSHClient -> Transport
    - 路径,也支持字符串形式
    - 文件 Transport

    ====> SSH帮助类 <====
    c.
    执行创建session # 堡垒机 Bug

    产出:
    - 链接远程,操作:命令,文件


    3. MySQL
    - 什么是MySQL
    服务端:
    a.socket服务端运行,监听:IP和端口
    b.获取客户端发送的数据: asdfasdfasdfasdfasdfasdf
    c.解析
    d.去文件中做操作
    客户端:
    a.socket客户端:基于各种语言的客户端
    b.验证
    c.发送命令(学习规则SQL语句)
    - 安装
    服务端:
    客户端:

    - 基本使用:
    a. 申请
    用户:

    授权:
    用户名,数据库(文件夹),表(文件),增删改查,IP

    b. 连接

    mysql -u root -h c1.com -p
    asdfasdf


    mysql -u wupeiqi -h 192.168.12.111 -p 123

    c. 规则
    文件夹(数据库):
    create database db1 default charset utf8;
    drop database db1;

    show databases;
    use db1;

    文件(表):

    show tables;


    create table tb1(
    id int not null auto_increment primary key,
    name char(20) null default 1,
    age int not null)engine=innodb default charset utf8;


    # 增
    insert into tb1(name,age) values('alex',18);
    # 删
    delete from tb1 where id>1;
    # 改
    update tb1 set age=168 where id=2;
    # 查
    select * from tb1;


    ============================================================

    外键:foreign key 一对多
    create table deparment(
    id int not null auto_increment primary key,
    title char(32) null
    )

    create table person(
    id int not null auto_increment primary key,
    username char(32) null ,
    age int not null,
    deparment_id int not null,
    constraint fk_cc foreign key (deparment_id) references deparment(id)
    )

    双向的外键: 多对多
    create table deparment(
    id int not null auto_increment primary key,
    title char(32) null
    )

    create table host(
    id int not null auto_increment primary key,
    ip char(32) null,
    port char(32) null
    )

    create table de_2_host(
    id int not null auto_increment primary key,
    did int not null,
    hid int not null,
    constraint fk_did_deparment foreign key (did) references deparment(id),
    constraint fk_hid_host foreign key (hid) references host(id)
    )



    连表:
    select * from person;

    select * from person
    left join deparment on person.deparment_id = deparment.id
    #
    1 alex 18 1 1 咨询
    2 oldboy 68 3 3 基础


    select id from deparment where title = "基础"

    select hostid from host_deparment where deparment_id=1111

    select * from host id in (1,2,3)

    #######


    4. pymysql
    pip3 install pymysql

    # 内部socket


    import pymysql

    # 创建连接
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
    # 创建游标
    cursor = conn.cursor()

    username = input('请输入用户名:')
    pwd = input('请输入密码:')

    # 执行SQL,并返回受影响行数
    #effect_row = cursor.execute("select * from userinfo where username=%s and pwd = %s", (username,pwd,))

    # root or 1==1 --
    # adfasdf
    # sql = "select * from userinfo where username=%s and pwd = %s" %(username,pwd,)
    # select * from userinfo where username=root or 1==1 -- and pwd = %s
    #effect_row = cursor.execute(sql)

    # 提交,不然无法保存新建或者修改的数据
    conn.commit()

    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

    作业:主机管理(pymysql操作数据,paramiko远程执行命令,线程池)

    表结构:
    用户类型表 # id 普通用户,管理员


    用户 # id 用户名 密码 用户类型ID(FK)


    主机表: # id ip,端口,用户名,pwd(siyao)


    用户主机表关系表: id 用户id(FK) 主机id(FK)

    功能:

    - 用户登录 (用户表中做验证,id)

    - 显示当前用户管理的所有主机列表()

    - 选中一批机器远程执行命令:
    ls

    PS: 增删改查

  • 相关阅读:
    python基础——列表生成式
    python基础——迭代
    python基础——切片
    python基础——递归函数
    python基础——函数的参数
    python基础——使用dict和set
    python基础——使用list和tuple
    python基础——字符串和编码
    堆——神奇的优先队列(下)
    堆——神奇的优先队列(上)
  • 原文地址:https://www.cnblogs.com/liyongsan/p/6622031.html
Copyright © 2020-2023  润新知