Day10 - Python异步IO、Pymysql、paramiko、

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: 增删改查

posted @ 2017-03-26 10:50  李永三  阅读(667)  评论(0编辑  收藏  举报