Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
Mysql操作:
grant select,insert,update,delete on *.* to root@"%" Identified by "123456"; #授权远程访问
create database s12day9 charset utf8; #创建支持中文的数据库
创建表:
create table students
(
id int not null auto_increment primary key,
name char(32) not null,
sex char(20) not null,
age tinyint unsigned not null,
tel char(13) null default "-"
);
desc students; #显示表结构
mysql> desc students;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(32) | NO | | NULL | |
| sex | char(20) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| tel | char(13) | YES | | - | |
+-------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
show create table students; #查看一个表创建时候的命令
mysql> show create table students\G;
*************************** 1. row ***************************
Table: students
Create Table: CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(32) NOT NULL,
`sex` char(20) NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`tel` char(13) DEFAULT '-',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
insert into students(name,sex,age,tel) values('tom','man',28,'18600033313');
insert into students(name,sex,age,tel) values('jack','man',18,'18600033312'); #插入数据
mysql> insert into students(name,sex,age,tel) values('tom','man',20,'');
Query OK, 1 row affected (0.00 sec)
select * from students; #查询数据
+----+------+-----+-----+-------------+
| id | name | sex | age | tel |
+----+------+-----+-----+-------------+
| 1 | alex | man | 18 | 151515151 |
| 2 | jack | man | 18 | 18600033312 |
| 3 | tom | man | 28 | 18600033313 |
| 4 | tom | man | 20 | 18600033313 |
+----+------+-----+-----+-------------+
4 rows in set (0.00 sec)
select * from students where age > 18 and name = "tom"; #组合条件查询
mysql> select * from students where age > 18 and name = "tom";
+----+------+-----+-----+-------------+
| id | name | sex | age | tel |
+----+------+-----+-----+-------------+
| 3 | tom | man | 28 | 18600033313 |
| 4 | tom | man | 20 | 18600033313 |
+----+------+-----+-----+-------------+
2 rows in set (0.00 sec)
select * from students where age like "2%"; #模糊查询
mysql> select * from students where age like "2%";
+----+------+-----+-----+-------------+
| id | name | sex | age | tel |
+----+------+-----+-----+-------------+
| 3 | tom | man | 28 | 18600033313 |
| 4 | tom | man | 20 | 18600033313 |
+----+------+-----+-----+-------------+
2 rows in set (0.00 sec)
update students set name = "aaa" where name = "alex"; #更新数据
mysql> update students set name = "aaa" where name = "alex";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
update students set age = 25; #批量改数据
mysql> update students set age = 25;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
delete from students where name = "aaa"; #删除数据
mysql> delete from students where name = "aaa";
Query OK, 1 row affected (0.00 sec)
alter table students add column nal char(32); #插入一个字段:
mysql> select * from students;
+----+------+-----+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+------+-----+-----+-------------+------+
| 2 | jack | man | 25 | 18600033312 | NULL |
| 3 | tom | man | 25 | 18600033313 | NULL |
| 4 | tom | man | 25 | 18600033313 | NULL |
+----+------+-----+-----+-------------+------+
3 rows in set (0.00 sec)
Mysql操作数据库:
pyton3操作数据库:使用pymysql模块:
import pymysql conn = pymysql.connect(host="10.16.59.102",user="root",passwd="",db="s12day9") #定义主机地址、端口、用户和密码
cur = conn.cursor() #连接数据库之后的状态,游标,现在在是在s10day12
reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Rachel','F',26,3663,"US")) #添加数据
reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Jack','F',23,135343,"CN")) #添加数据
conn.commit() #提交更改,在python 3不提交也是写入到数据库的
conn.close() #关闭conn连接
print(reCount)
python2操作数据库:使用MySQLdb模块:
#/usr/bin/env python
# -*- coding:utf-8 -*- import MySQLdb
conn = MySQLdb.connect(host="localhost",user="root",passwd="zhang@123",db="s11day12") #实例化对象并定义主机地址、端口、用户和密码
cur = conn.cursor() #连接数据库之后的状态,游标,现在在是在当前数据库之上 #reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Jack1','F',3,135343,"CN")) #reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Rachel1','F',6,3663,"US"))
reCount = cur.execute("select * from students")
data = cur.fetchall() #取到的所有数据
print(data) data1 = data[0] #取获取到的第一个数据
print(list(data1)) #将获取到的数据转换为列表,以方便做下一步操作 cur.close() #关闭游标
conn.close() #关闭会话 执行结果:
C:\Python27\python.exe C:/Users/zhang/PycharmProjects/untitled1/python_mysql.py
((33L, 'tom', 'F', 26, '', 'US'), (73L, 'Rachel', 'F', 6, '', 'US'), (72L, 'Jack', 'F', 3, '', 'CN'), (74L, 'Jack', 'F', 3, '', 'CN'), (75L, 'Rachel', 'F', 6, '', 'US'), (76L, 'Jack1', 'F', 3, '', 'CN'), (77L, 'Rachel1', 'F', 6, '', 'US'))
[33L, 'tom', 'F', 26, '', 'US']
批量插入数据:
#/usr/bin/env python
# -*- coding:utf-8 -*- import MySQLdb
conn = MySQLdb.connect(host="localhost",user="root",passwd="zhang@123",db="s11day12") #实例化对象并定义主机地址、端口、用户和密码
cur = conn.cursor() #连接数据库之后的状态,游标,现在在是在当前数据库之上
data =[
('a1','M',11,111,'CN'),
('a2','F',19,111,'JP'),
('a3','F',11,111,'USA'),
('a4','F',11,555,'UK'),
] #将列表插入到数据库,数据格式与表中的格式需一致 reCount = cur.executemany('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',li) #使用sql通过Python模块将数据插入到MySQL,值为变量,会将后面的列表data传递进去
cur.close() #关闭游标
conn.close() #关闭会话
print(reCount)
事物回滚:
回滚需要表的引擎必须为InnoDB才行,因为MySAM是无事物引擎
#/usr/bin/env python
# -*- coding:utf-8 -*- import MySQLdb
conn = MySQLdb.connect(host="localhost",user="root",passwd="zhang@123",db="s11day12") #实例化对象并定义主机地址、端口、用户和密码
cur = conn.cursor() #连接数据库之后的状态,游标,现在在是在当前数据库之上 reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Jack1','F',3,135343,"CN"))
reCount = cur.execute('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)',('Rachel1','F',6,3663,"US")) conn.rollback()
conn.commit() cur.close() #关闭游标
conn.close() #关闭会话
print(reCount)
Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作的更多相关文章
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]
[并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...
- 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型
一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...
- python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02
目录 进程补充 进程通信前言 Queue队列的基本使用 通过Queue队列实现进程间通信(IPC机制) 生产者消费者模型 以做包子买包子为例实现当包子卖完了停止消费行为 线程 什么是线程 为什么要有线 ...
- 8.12 day31 进程间通信 Queue队列使用 生产者消费者模型 线程理论 创建及对象属性方法 线程互斥锁 守护线程
进程补充 进程通信 要想实现进程间通信,可以用管道或者队列 队列比管道更好用(队列自带管道和锁) 管道和队列的共同特点:数据只有一份,取完就没了 无法重复获取用一份数据 队列特点:先进先出 堆栈特点: ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
- Python3学习之路~9.4 队列、生产者消费者模型
一 队列queue 当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用. 队列的作用:1.解耦,使程序直接实现松耦合 2.提高处理效率 列表与队列都是有顺序的,但是他们之间有一个很大的区别 ...
- 03:进程Queue --- 生产者消费者模型
1 进程Queue介绍 1 进程间数据隔离,两个进程进行通信,借助于Queue2 进程间通信:IPC -借助于Queue实现进程间通信 -借助于文件 -借助于数据库 -借助 ...
- python 之 并发编程(生产者消费者模型、守护进程的应用)
9.8 生产者消费者模型 该模型中包含两类重要的角色: 1.生产者:将负责造数据的任务比喻为生产者 2.消费者:接收生产者造出的数据来做进一步的处理的被比喻成消费者 实现生产者消费者模型三要素:1.生 ...
随机推荐
- 远程登录 Windows server 2008 黑屏
scenerio: 远程登录 Windows server 2008 黑屏,别人那里一切正常. Solution:在黑屏界面,点击桌面,按住Ctrl+Alt+End键 -> Log Off. ...
- WRTnode 的 HTTP Web 开关实验(2016-05-16)
前言 这里是节取自 物联网的任意门——WRTnode2R 评测 中的 http web 开关灯实验,所以有一些前置设置如果没有描述清楚可参考该处. 正文 步骤一:编辑一个 html 文件,放在 /ww ...
- [C#]窗体切换--避免开启多个线程
先说说这个多窗体的界面的解决的办法: 用到的方法很简单,就是程序运行就建立一个MainForm,在这个MainForm中设立一个Panel,同时设立几个按钮,按下每个按钮都在这个Panel中载入不同的 ...
- java覆写hashcode方法
覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个域): 3, boolean型,计算(f? 0 ...
- Android 开发笔记 “广播组件使用”
在Activity中,注册广播的一个Demo. 总共分3步 第一步:定义一个BroadcastReceiver广播接收类: private BroadcastReceiver mBroadcastRe ...
- CSS3-旋转齿轮
CSS3-旋转齿轮 查看DEMO 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 先来认识一下css3的animation animat ...
- 怎样在VC里面使用graphics.h绘图
网上很多绘图程序和小游戏程序都是用的 TC,在 VC 下编译时提示错误:fatal error C1083: Cannot open include file: 'graphics.h': No su ...
- 异步和同步http请求超时机制
异步超时设置: 例子: Example: do a simple HTTP GET request for http://www.nethype.de/ and print the response ...
- ZOJ 1825 compoud words
题目大意:输入一串递增的单词序列,需要找出符合条件的单词递增输出,条件是:将一个单词拆成左右两个单词后,能在输入中找到这两个单词.例如单词 alien,可以拆成 a 和 lien,而输入中刚好同时有a ...
- BZOJ 1684: [Usaco2005 Oct]Close Encounter
题目 1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec Memory Limit: 64 MB Description Lacking e ...