`

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()
分享到:
评论

相关推荐

    python+tkinter+pymysql+mysql+SQL的GUI学生成绩信息管理系统

    技术:python+tkinter+pymysql+mysql+SQL,图形化界面,数据库的增删改查,计算平均分,最高分。

    Python(pymysql面向对象操作类CURD).zip

    在Python的数据库操作中,`pymysql`是一个流行的MySQL数据库连接库,它提供了与MySQL交互的功能。面向对象编程(Object-Oriented Programming, OOP)是Python编程的核心概念之一,将数据库操作类化可以使得代码更加...

    使用Python连接和操作MySQL数据库工具包资-PyMySQL源代码

    使用Python连接和操作MySQL数据库工具包-PyMySQL (1)安装Python (2)安装MySQL (3)安装PyMySQL (4)创建连接 (5)Python代码操作数据库 1. 引入模块MySQLdb:import MySQLdb 2. 连接到数据库和建立游标:...

    pymysql适用python2.7版本

    总的来说,PyMySQL是Python2.7中连接MySQL数据库的一个强大工具,它提供了丰富的API,可以方便地进行各种数据库操作。通过上述步骤,你可以在Python2.7环境中顺利安装并使用PyMySQL,从而更好地管理和处理数据库中的...

    python-mysql.zip_MYSQL_pymysql_python MySQL_python连接mysql_连接数据库

    总之,Python的`pymysql`库为开发者提供了强大而灵活的手段,使得在Python环境中管理MySQL数据库变得简单易行。了解和掌握这些基本概念和操作,将极大地提升你在数据处理和Web应用开发中的效率。

    【PyMySQL】python3 mysql数据库操作工具

    PyMySQL是Python连接MySQL数据库的一个库,它提供了类似于Python标准库DB-API(PEP 249)的接口,使得在Python中操作MySQL变得简单易行。 ### 安装PyMySQL 要开始使用PyMySQL,首先需要安装这个库。在安装过程中,...

    Python3.6 使用pymysql库操作mysql,实现读写分离

    用python3 引入pymysql库,实现对mysql数据库的操作,支持数据库的读写分离配置。仅限数据库的操作。 实现了基本的链式操作,比如: model = new Model(); model.table("表").field("字段").where("条件").orderBy(...

    Python pymysql 数据库模型封装类(python3.7)

    Python pymysql dbmodelClass数据库模型封装类(python version 3.7)

    pymysql python连接mysql数据库

    **PyMySQL:Python连接MySQL...综上所述,PyMySQL是Python连接MySQL数据库的重要工具,通过其API,我们可以轻松地执行SQL操作,管理和维护数据库。了解并熟练掌握PyMySQL的使用,对于Python开发者来说是至关重要的。

    python3.6使用pymysql连接Mysql数据库

    python3.6使用pymysql连接Mysql数据库及简单的增删改查操作,供大家参考,具体内容如下 折腾好半天的数据库连接,由于之前未安装pip ,而且自己用的Python 版本为3.6. 只能用 pymysql 来连接数据库,(如果有和我...

    Python语句实现Mysql多条插入语句

    本代码,用python语句,实现了一次插入多条sql语句。希望能对大家带来帮助。

    pymysql 操作MySQL数据库

    pymysql 是 Python 中一个流行的 MySQL 客户端库,提供了与 MySQL 数据库的交互操作。下面将详细介绍 pymssql 操作 MySQL 数据库的相关知识点。 安装 PyMySQL PyMySQL 可以通过 pip 命令安装,也可以通过 PyCharm ...

    python mysql pymysql数据库连接池源代码

    总结来说,`pymysql`是Python中用于操作MySQL的库,而通过`DBUtils.PooledDB`可以实现连接池,优化数据库操作的性能。了解并熟练运用这些工具,能帮助开发者编写出更高效、稳定的Python MySQL应用程序。

    Python操作MySQL数据进行图片存取操作

    本例中使用Python语言,基于Pymysql包,对图片进行存取操作

    Python访问MySQL并实现增删改查

    总结,Python通过`pymysql`库提供了与MySQL交互的能力,使得我们可以轻松地执行SQL语句,实现对数据库的增删改查操作。这在数据处理、数据分析以及Web应用等场景中非常实用。理解并熟练掌握这一技能对于任何Python...

    python pymysql 无法登陆修改 plugin 脚本

    python pymysql 无法登陆,报错pymysql.err.InternalError: (1698, "Access denied for user 'root'@'localhost'")或pymysql.err.InternalError: (1045, "Access denied for user 'root'@'localhost'"),详细报错...

    python PyMySQL 数据库操作

    使用python完成: 公司新闻表(ID,新闻标题,发布时间,点击次数) a.一次性添加2条记录(文件一) b.根据用户输入的标题删除记录(文件二) """ # 引入模块 from Ab import Ab_MySQL # 实例化对象 A1 = Ab_MySQL...

    python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现.zip

    python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现 python-mysql-replication MySQL复制协议在PyMYSQL之上的纯 python 实现。 这允许你接收诸如插入。更新。delete 和它们的数据和原始...

    python使用pymysql操作MySQL的基础操作

    最近在学习python爬虫,写一下关于MySQL数据库操作的笔记 有错误的话还请看到的大佬们指正 1.导包 import pymysql 2.链接数据库 conn = pymysql.connect(host='127.0.01',port=3306,\nuser='root',password='123456...

    pymysql包-python链接mysql

    Python中的`pymysql`库是用于连接MySQL数据库的一个重要工具,它提供了类似于Python标准库`DB-API`的接口,使得Python程序员可以方便地在Python程序中操作MySQL数据库。本篇文章将详细介绍`pymysql`的使用方法、核心...

Global site tag (gtag.js) - Google Analytics