python操作mysql数据库

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()

 

posted @ 2017-04-06 14:41  春野之火  阅读(171)  评论(0编辑  收藏  举报