python(pymysql)之mysql简单操作

        

一、mysql简单介绍

  说到数据库,我们大多想到的是关系型数据库,比如mysql、oracle、sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱不得不首先推荐的是mysql数据库了,而且Mysql数据库的第一个版本就是发行在Linux系统上的。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境

二、安装msql

  1、centos6.4编译安装mysql

  参考地址:http://www.centoscn.com/CentosServer/sql/2014/0316/2584.html

  2、windows安装msyql  

1
2
官网下载地址:
http://dev.mysql.com/downloads/mysql/

三、mysql简单操作

  可用过客户端远程操作mysql:Navicat for MySql工具

  1、启动数据库:

  

  链接数据库:

  

  2、显示数据库

    

1
2
3
4
默认数据库:
  mysql - 用户权限相关数据
  test - 用于用户测试数据
  information_schema - MySQL本身架构相关数据

   2、使用数据库

    

  3、用户授权

  用户管理  

1
2
3
4
5
6
7
8
9
10
创建用户
    create user '用户名'@'IP地址' identified by '密码';
删除用户
    drop user '用户名'@'IP地址';
修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
    set password for '用户名'@'IP地址' = Password('新密码')
  
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

   授权管理:  

1
2
3
show grants for '用户'@'IP地址'                  -- 查看权限
grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限   
 权限
 数据库
 对于用户和IP

四、表操作

  1、在库中创建表  

1
2
3
4
5
use test #选择test库
create table 表名(    #创建表
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
)   
1
2
3
是否可空,null表示空,非字符串
    not null    - 不可空
    null        - 可空
1
2
3
4
5
默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    create table tb1(
        nid int not null defalut 2,
        num int not null
    )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)
    create table tb1(
        nid int not null auto_increment primary key,
        num int null
    )
    
    create table tb1(
        nid int not null auto_increment,
        num int null,
        index(nid)
    )
    注意:1、对于自增列,必须是索引(含主键)。
         2、对于自增可以设置步长和起始值
             show session variables like 'auto_inc%';
             set session auto_increment_increment=2;
             set session auto_increment_offset=10;
 
             shwo global  variables like 'auto_inc%';
             set global auto_increment_increment=2;
             set global auto_increment_offset=10;
1
2
3
4
5
6
7
8
9
10
11
主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
    create table tb1(
        nid int not null auto_increment primary key,
        num int null
    )
    
    create table tb1(
        nid int not null,
        num int not null,
        primary key(nid,num)
    )
1
2
3
4
5
6
7
8
9
10
11
12
外键,一个特殊的索引,只能是指定内容
    creat table color(
        nid int not null primary key,
        name char(16not null
    )
 
    create table fruit(
        nid int not null primary key,
        smt char(32) null ,
        color_id int not null,
        constraint fk_cc foreign key (color_id) references color(nid)
    )

   2、数据表操作:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#基于Navicat for MySql工具实现操作
show tables; #查询库中有哪些表
create table lcj(
id int not null auto_increment PRIMARY KEY,  #PRIMARY KEY主键IP 自增
name char(30not null,
sex char(4not null,
age tinyint unsigned not null,
tel char(13) null default  "-");  #电话默认为-
SELECT * from lcj;  #查询表
#插入数据
insert into lcj VALUES(0001,'xiaoluo','男',18,'13520617734')
#同时插入多条数据
insert into lcj VALUES( 
0004,'xiaoluo','男',18,'13520617734'),
(0002,'qq','man',18,'13212345432'),
(0003,'ww','gril',19,'13567890987');
 
#更新数据;将ID为3的姓名改为lcj
UPDATE lcj set name = 'lcj' WHERE id = 3;
#查看字典条数据
SELECT name from lcj where id = 2;
#查看所有数据
SELECT * from lcj
#删除数据
DELETE from lcj WHERE id = 4;

   清空表:  

1
2
delete from 表名
truncate table 表名

   修改表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
        alter table 表名 modify column 列名 类型;  -- 类型
        alter table 表名 change 原列名 新列名 类型; -- 列名,类型
  
添加主键:
        alter table 表名 add primary key(列名);
删除主键:
        alter table 表名 drop primary key;
        alter table 表名  modify  列名 int, drop primary key;
  
添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称
  
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

   基本数据类型

  MySQL的数据类型大致分为:数值、时间和字符串;

  参考地址:http://www.runoob.com/mysql/mysql-data-types.html

  mysql其他操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
1、条件
    select * from 表 where id 1 and name != 'alex' and num = 12;
 
    select * from 表 where id between 5 and 16;
 
    select * from 表 where id in (11,22,33)
    select * from 表 where id not in (11,22,33)
    select * from 表 where id in (select nid from 表)
 
2、通配符
    select * from 表 where name like 'ale%'  - ale开头的所有(多个字符串)
    select * from 表 where name like 'ale_'  - ale开头的所有(一个字符)
 
3、限制
    select * from 表 limit 5;            - 5
    select * from 表 limit 4,5;          - 从第4行开始的5
    select * from 表 limit 5 offset 4    - 从第4行开始的5
 
4、排序
    select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
    select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
    select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
 
5、分组
    select num from 表 group by num
    select num,nid from 表 group by num,nid
    select num,nid from 表  where nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
 
    select num from 表 group by num having max(id) > 10
 
    特别的:group by 必须在where之后,order by之前
 
6、连表
    无对应关系则不显示
    select A.num, A.name, B.name
    from A,B
    Where A.nid = B.nid
 
    无对应关系则不显示
    select A.num, A.name, B.name
    from A inner join B
    on A.nid = B.nid
 
    A表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A left join B
    on A.nid = B.nid
 
    B表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A right join B
    on A.nid = B.nid
 
7、组合
    组合,自动处理重合
    select nickname
    from A
    union
    select name
    from B
 
    组合,不处理重合
    select nickname
    from A
    union all
    select name
    from B

 

五、基于Pycharm中pymysql模块实现mysql操作

  1、Pycharm安装pymysql模块  

  2、简单使用pymysql某块

  1)插入数据

  通过pymysql向远程数据库同时插入多条数据并打印插入数据条数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import pymysql
#连接数据库
conn = pymysql.connect(host='192.168.1.152',port= 3306,user = 'root',passwd='123123',db='test'#db:库名
#创建游标
cur = conn.cursor()
#插入一条数据
# reCount = cur.excute('insert into lcj(name,age) vaules(%s,%s)',('ff',18))
#向test库中的lcj表插入
# ret = cur.executemany("insert into lcj(name,tel)values(%s,%s)", [("kk",13212344321),("kw",13245678906)])
#同时向数据库lcj表中插入多条数据
ret = cur.executemany("insert into lcj values(%s,%s,%s,%s,%s)", [(41,"xiaoluo41",'man',24,13212344332),
                                                              (42,"xiaoluo42",'gril',21,13245678948),
                                                              (43,"xiaoluo43",'gril',22,13245678949),
                                                                 (44,"xiaoluo44",'main',24,13543245648)])
#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()
#打印结果
print(ret)

   2)查询数据

  在Pycharm控制台输出lcj表中数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import pymysql
#连接数据库
conn = pymysql.connect(host='192.168.1.152',port= 3306,user = 'root',passwd='123123',db='test'#db:库名
#创建游标
cur = conn.cursor()
#查询lcj表中存在的数据
cur.execute("select * from lcj")
#fetchall:获取lcj表中所有的数据
ret1 = cur.fetchall()
print(ret1)
print("----------------------")
#获取lcj表中前三行数据
ret2 = cur.fetchmany(3)
print(ret2)
print("------------------------------")
#获取lcj表中第一行数据
ret3= cur.fetchone()
print(ret3)
#同时向数据库lcj表中插入多条数据
# ret = cur.executemany("insert into lcj values(%s,%s,%s,%s,%s)", [(41,"xiaoluo41",'man',24,13212344332),
#                                                             (42,"xiaoluo42",'gril',21,13245678948),
#                                                             (43,"xiaoluo43",'gril',22,13245678949),
#                                                                (44,"xiaoluo44",'main',24,13543245648)])
#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()

 注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode='relative')  # 相对当前位置移动【1:表示向下移动一行,-1:表示向上移动一行
  • cursor.scroll(2,mode='absolute') # 相对绝对位置移动 【1:表示向上移动一行,-1:表示向下移动一行

  3)删除数据  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import pymysql
#连接数据库
conn = pymysql.connect(host='192.168.1.152',port= 3306,user = 'root',passwd='123123',db='test'#db:库名
#创建游标
cur = conn.cursor()
#删除cj表中数据
cur.execute("delete * from lcj")
#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()

   4)修改表中的数据  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import pymysql
#连接数据库
conn = pymysql.connect(host='192.168.1.152',port= 3306,user = 'root',passwd='123123',db='test'#db:库名
#创建游标
cur = conn.cursor()
#将lcj表中id=3的name 修改为lcjj
cur.execute("UPDATE lcj set name = 'lcjj' WHERE id = 3")  #逼表中所有的操作都可以再此进行操作
#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()

   5)fetch数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import pymysql
#连接数据库
conn = pymysql.connect(host='192.168.1.152',port= 3306,user = 'root',passwd='123123',db='test'#db:库名
#设置游标类型,默认游标类型为元祖形式
#将游标类型设置为字典形式
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute("select * from lcj")  #逼表中所有的操作都可以再此进行操作
#将lcj表中所有数据以字典形式输出
ret = cur.fetchall()
print(ret)   #[{'age': 18, 'tel': '13520617734', 'name': 'xiaoluo', 'id': 1, 'sex': '?'},
#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值