当然前面会把mysql基本概述一下

  mysql在头里写过二遍,那个时候是自个儿正好踏向博客,前不久介绍一下mysql的python人机联作,当然前面会把mysql基本概述一下。

 

  目录:
一、命令脚本(mysql)
    1、基本命令
    2、数据库操作命令
    3、表操作命令
    4、数据操作命令
    5、查
    6、关联
二、python交互
    1、数据库连接
    2、创建数据库表
    3、插入数据
    4、更新数据库
    5、删除数据
    6、数据库查询
三、mysql封装(方便使用)
    1、python封装的my_sql类
    2、案例(调用my_sql类)

 

朝气蓬勃、命令脚本

1、基本命令

  (1卡塔 尔(阿拉伯语:قطر‎运转服务

    • 以管理人身份运行cmd
    • net start 服务名称

  (2)结束服务

    • 以管理人身份运维cmd
    • net stop 服务名称

  (3卡塔 尔(阿拉伯语:قطر‎连接数据库

    • 格式:mysql – u root – p
      ->输入密码

  (4卡塔 尔(阿拉伯语:قطر‎退出登陆(断开连接卡塔 尔(英语:State of Qatar)

    • exit或quit

  (5卡塔 尔(英语:State of Qatar)查看版本(连接后方可试行卡塔 尔(英语:State of Qatar)

    • select version()

  (6卡塔尔显示当前天子(连接后方可实行卡塔 尔(英语:State of Qatar)

    • select now()

  (7卡塔尔国远程连接

    • mysql – h ip地址 – u 客商名 – p
      —>输入对方mysql密码

2、数据库操作命令

  (1)成立数据库

    • create database 数据库名 charset
      = utf8

  (2卡塔 尔(英语:State of Qatar)删除数据库

    • drop database 数据库名

  (3卡塔尔国切换数据库

    • use 数据库名

  (4卡塔尔国查看当前甄选的数据库

    • select database()

3、表操作命令

  (1卡塔尔国查看数据库中全部表

    • show tables

  (2)创建表

    • create table
      表名(列及类型卡塔尔国

        eg:create table student(id int
    auto_increment primary key,
                   name
    varchar(20) not null)
        注:auto_increment 自增长     
    primary key 主键     not null 非空

  (3)删除表

    • drop table 表名

  (4卡塔尔查看表结构

    • desc 表名

  (5卡塔尔查看建表语句

    • show create table 表名

  (6卡塔 尔(英语:State of Qatar)重命名表

    • rename table 原表名 to
      新表名

  (7)修改表

    • alter table 表名 add | change |
      drop 列名

4、数据操作命令

  (1)增

    a、全列插入
      insert into 表名
values(…)
      eg:
      insert into student values(0,
“tom”, “北京”)

      主键列是机动增进,可是在全列插入时索要占位,平常使用0,插入成功现在以实际数目为准
    b、缺省插入
      insert into 表名(列1,列2..)
values(值1,值2..)
    c、同有的时候常间插入多条数据
      insert into 表名 values(…),
(…), …

  (2)删

    delete from 表名 where
条件
    不写标准则全删

  (3)改

    update 表名 set 列1 = 值1, 列2 =
值2, … where 条件

  (4)查

    查询表中的全体数目
    select * from 表名

5、查

  (1卡塔 尔(阿拉伯语:قطر‎基本语法

    select * from 表名


        from关键字后面是表名,表示数据来源于这张表
    -   
        select后面写表中的列名,如果是 \*
        表示在结果集中显示表中额所有列
    -   
        在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中
    -   
        如果要查询多个列,之间使用逗号分隔

    # eg:select name as a,age from
student;

  (2卡塔 尔(阿拉伯语:قطر‎杀绝重复行

    在select前边列前边使用distinct能够消亡重复的行
    eg:select distinct gender from
student

  (3卡塔尔国条件查询

    a、语法
      select * from 表名 where
条件
    b、比较运算符
      等于(=卡塔尔 大于(>)小于(<卡塔尔国 大于等于(>=卡塔 尔(英语:State of Qatar) 小于等于(<=卡塔 尔(阿拉伯语:قطر‎ 不等于(!= 或
<>)
    c、逻辑运算符
      and or not
    d、模糊查询
      like
      %
表示放肆多个随机字符
      _ 表示一个随意字符
    e、范围查询
      in
表示在七个非延续的限定内
      between。。。and。。。
表示在二个连续的范围内
      eg:where id in (8, 10,
13)
    f、空判断

      注意:null与””是分裂的
      判断空:is null
      剖断非空:is not
null
    g、优先级

      小括号,not,比较运算符,逻辑运算符

      and比or优先级高,同期现身并愿意先选or,须要结合括号来使用

  (4)聚合

    为了连忙得到总括数,提供了5个聚合函数
    a、count(*)
表示总括总行数,括号中能够写 * 或列名
    b、max(列)
表示求此列的最大值
    c、min(列)
表示求此列的最小值
    d、sum(列)
表示求此列的和
    e、avg(列)
表示求此列的平均值

  (5)分组

    根据字段分组,表示此字段相似的多少会被放到二个会合中。分组后,只好查询出同样的数据列,对于有反差的数据列不能展现在结果集中

    能够对分组后的数额进行总结,做聚合运算
    select 列1, 列2, 聚合… from
表名 group by 列1, 列2 having 列1, 列2
    eg:  查询男女子总量
      select gender, count(*) from
student group by gender

    where与having的区分:where是对from前边钦命的表张开筛选,归属对原来数据的筛选;having是对group
by的结果实行筛选。

  (6)排序

    select * from 表名 order by 列1
asc | desc, 列2 asc | desc, …

    a、将数据依据列1开展排序,假如有些列1的值相仿则遵照列2排序

    b、私下认可依据从小到大的顺序
    c、asc升序
    d、desc降序

  (7)分页

    select * from 表名 limit start,
count
    从start开始,看count条

6、关联

  • 建表语句

      (1)create table class(id int
    auto_increment primary key, name varchar(20) not null, stuNum int not
    null)
      (2)create table students(id int
    auto_increment primary key, name varchar(20) not null, gender bit
    default 1, classid int not bull, foreign key(classid) references
    class(id))

  • 插入一些数码:

  (1)insert into class values(0,
“python1”, 50), (0, “python2”, 60), (0, “python3”, 70)

  (2)insert into students values(0,
“tom”, 1, 1)

  • 涉及查询:

      (1)select students.name, class.name
    from class inner join students on class.id = students.classid

  • 分类:

  (1)表A inner join 表B

    表A与表B相配的行会出未来结果聚焦
  (2)表A left join 表B

    表A与表B相称的行会出以往结果聚集,外加表A中只有的多寡,未对应的数据应用null填充
  (3)表A right join 表B

    表A与表B相配的行会出以后结果集中,外加表B中唯有的多少,未对应的多少利用null填充

二、python交互

1、连接数据库

 1 import pymysql
 2 
 3 
 4 # 连接数据库
 5 # 参数一:mysql服务所在主机的IP
 6 # 参数二:用户名
 7 # 参数三:密码
 8 # 参数四:要连接的数据库名
 9 db = pymysql.connect("localhost", "root", "111111", "student")
10 
11 # 创建一个cursor对象
12 cursor = db.cursor()
13 -----------------------------------------------------------------------------------------
14 # 要执行的sql语句
15 sql = "select version()"
16 
17 # 执行sql语句
18 cursor.execute(sql)
19 
20 # 获取返回的信息
21 data = cursor.fetchone()
22 print(data)
23 ----------------------------------------------------------------------------------------
24 # 断开
25 cursor.close()
26 db.close()

  这里本身选用的是pymysql,其实那么些和MySQLdb八九不离十,命令也很像。连接时,主机IP假设是在本机,间接选择localhost就可以,也可以写IP地址,那样能够完成远程的连接。虚线中间有个别是要扩充差异操作时索要转移的有的。

2、成立数量库表

  上边给出了三回九转数据库的代码,其实背后的操作就大致多了,外界框架不改变,只须要改内部的sql语句,甚至分级的片段操作。

1 # 检查表是否存在,如果有则删除
2 cursor.execute("drop table if exists bancard")
3 
4 # 建表
5 sql = "create table bandcard(id int auto_increment primary key, money int not null)"
6 cursor.execute(sql)

3、插入数据

1 sql = "insert into bandcard values(0, 300)"
2 try:
3     cursor.execute(sql)
4     db.commit() # 执行这条语句才插入
5 except:
6     # 如果提交失败,回滚到上一次数据
7     db.rollback()

4、更新数据库

1 sql = "update bandcard set money=1000 where id=1"
2 try:
3     cursor.execute(sql)
4     db.commit()
5 except:
6     # 如果提交失败,回滚到上一次数据
7     db.rollback()

  可以见见,后边的操作基本上甚至回归mysql本人,大家记住那样二个流水生产线就足以了。

5、删除数据

1 sql = "delete from bandcard where money=200"
2 try:
3     cursor.execute(sql)
4     db.commit()
5 except:
6     # 如果提交失败,回滚到上一次数据
7     db.rollback()

6、数据库查询操作

  • fetchone()

    作用:获取下多个查询结果集,结果集是八个指标

  • fetchall()

    功效:接受全体的回到的行

  • rowcount

    是四个只读属性,再次回到execute()方法影响的行数

 1 sql = "select * from bandcard where money>200"
 2 try:
 3     cursor.execute(sql)
 4     # 返回查询结果
 5     reslist = cursor.fetchall()
 6     for row in reslist:
 7         print("%d--%d" % (row[0], row[1]))
 8 except:
 9     # 如果提交失败,回滚到上一次数据
10     db.rollback()

三、mysql的包裹(方便今后使用时直接调用卡塔 尔(阿拉伯语:قطر‎

 1 import pymysql
 2 
 3 
 4 class my_sql():
 5 
 6     def __init__(self, host, user, passwd, dbName):
 7         self.host = host
 8         self.user = user
 9         self.passwd = passwd
10         self.dbName = dbName
11 
12     def connect(self):
13         self.db = pymysql.connect(
14             self.host, self.user, self.passwd, self.dbName)
15         self.cursor = self.db.cursor()
16 
17     def close(self):
18         self.cursor.close()
19         self.db.close()
20 
21     def get_one(self, sql):
22         res = None
23         try:
24             self.connect()
25             self.cursor.execute(sql)
26             res = self.cursor.fetchone()
27             self.close()
28         except:
29             print("查询失败")
30         return res
31 
32     def get_all(self, sql):
33         res = ()
34         try:
35             self.connect()
36             self.cursor.execute(sql)
37             res = self.cursor.fetchall()
38             self.close()
39         except:
40             print("查询失败")
41         return res
42 
43     def insert(self, sql):
44         return self.__edit(sql)
45 
46     def update(self, sql):
47         return self.__edit(sql)
48 
49     def delete(self, sql):
50         return self.__edit(sql)
51 
52     def __edit(self, sql):
53         count = 0
54         try:
55             self.connect()
56             count = self.cursor.execute(sql)
57             self.db.commit()
58             self.close()
59         except:
60             print("事务提交失败")
61             self.db.rollback()

  上边包车型大巴类中封装了用python封装了对mysql的连天,增,删,改,查等作用,在之后应用的时候,完全能够直接调用此中的主意,制止双重造轮子嘛。上边给叁个选择的案例:

1 from my_sql import my_sql
2 
3 # 这个是连接mysql的参数,前面有解释到,使用时候连接上自己的数据库就好
4 s = my_sql("xxx.xxx.xx.x", "xxxx", "xxxxxx", "student")
5 
6 # 查询
7 res = s.get_all("select * from bandcard where money>200")
8 for row in res:
9     print("%d--%d" % (row[0], row[1]))

  当然在您使用的时候要写完整调用的类的门路,笔者这里是在同多少个索引下写的。新建两个谈得来的公文,引进my_sql中的my_sql类,然后就足以采纳了。

 

相关文章