交互模式下使用python操作mysql(入门篇)

这一篇大概整理一下python操作mysql常用的增删查改操作;此篇文章基于python交互模式下进行,主要是因为方便调试,可以更直观的观看python与mysql的交互动作;

一、操作前准备:

已安装python;已安装mysql;已安装MySQLdb;

操作环境:Terminal

操作检验

mysql

 

python&MySQLdb(MySQLdb安装好后在python交互模式下使用import命令检查是否可以正常使用)

二、mysql操作

1、这里有我之前已经建好的数据库与数据表,这里还是沿用cdy数据库来进行操作,新建一张test表,用来插入原始数据;

 

2、新建数据表:

create table test(id int(3) not null primary key auto_increment,username varchar(40),age int,sex text)default charset=utf8;

 

表格中包含username、age、sex三个元素,接下来要在插入一条原始数据作为对比显示;

3、插入表数据

insert into test(username,age,sex) values("萨其马","15","male");

 

这里可以看到已经插入了一条数据,接下来进入python交互模式,使用python来进行插入数据的操作;

 

三、python操作--新增数据

1、连接数据库(建立一个MySQLdb.connect()的实例对象cloud)

cloud = MySQLdb.connect(host="localhost",user="root",passwd="caidongyuan",db="cdy",charset="utf8")

2、使用cursor游标(也称指针,查询篇会讲指针的作用)

local = cloud.cursor()

3、使用cursor执行插入命令(常用的有下面两种命令,简单的概括就是一种执行单条语句插入单条记录,另一种是执行单条语句插入多条记录)

命令1:execute(query, args):执行单条sql语句。query为sql语句本身,args为参数值的列表

命令2:executemany(query, args):执行单条sql语句,但是重复执行参数列表里的参数

4、execute(query, args)

local.execute("insert into test(username,age,sex) values(%s,%s,%s)",("恕瑞玛","21","female"))

 

5、数据校验

 

这里可以看到mysql中已经顺利的插入数据了;这个时候可以用executemany(query, args)插入多条数据;

6、executemany(query, args)

local.executemany("insert into test(username,age,sex) values(%s,%s,%s)",(("卡瑞玛","24","female"),("托马斯","18","female"),("马瑞斯","21","male")))

 

7、数据校验

这里可以看到数据也可以正常插入;

 

四、python操作--查询数据

查询数据常用的命令为以下几条:

  • fetchall(self):接收全部的返回结果行.
  • fetchone():返回一条结果行.
  • fetchmany(size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
  • scroll(value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.

下面来一条一条试一下

1、fetchall(self):接收全部的返回结果行

 

这里看官在操作的时候可能会发现一个问题:

 

再次打印fetchall(self)时,打印出来的是空值;这里是因为通过指针找出来的对象,在读取的时候有一个特点,就是那个指针会移动,移动过的指针并不会再次复位,也就是说通过上一步pall = local.fetchall()时,指针已经移到对象的最后一行,这个时候再次打印自然就会得到一个空值,这个解决办法也很简单,就是通过local.execute("select * from test")再次赋一次值,这个时候相当于刷新了指针的位置,再次使用fetchall(self)就可以再次打印全部的信息了,如下:

 

2、fetchone():返回一条结果行

这个方法就打印出单行信息,准确的说是对象的第一行信息,其实用这个方法可以更加直观的观看指针所在的位置:

 

如上图,fetchone()方法是打印指针当前第一行的信息,当我第一次使用fetchone()的时候,这个时候指针就会下移到第二行的位置,所以再次使用fetchone()的时候,它就会默认打印出它认为是第一行实际上是第二行的信息,以此类推,直到打印出空值为止;

3、fetchmany(size=None):接收size条返回结果行

如果了解了以上两个方法,那么这个方法也很简单,就是打印出指定条数的数据,指定的条数取决于括号里size的值;若size值小于总行数,则打印指定行数的数据;若size值大于总行数,则打印出全部的数据;

 

如上图,第一次打印指定5条数据,此时指针已移动到第六条数据的上方,也就是还剩下三条数据没有打印,此时再次使用相同的命令print local.fetchmany(size = 5)打印,就把剩下所有的三条数据全部打印出来了;

4、scroll(value, mode='relative'):移动指针到某一行

这种方式就是打印指定的位置数据,scroll(value)中value值为正数n,则指针向下移动n条位置,相反,scroll(value)中value值为负数-n,则指针向上移动n条位置

 

  • 如上图,一共有8条数据,第一次使用fetchone(),当前指针在第二条位置;
  • 输入local.scroll(1),此时指针在第三条位置;
  • 第二次使用fetchone(),打印出第三条位置的数据,此时指针在第四条位置;
  • 输入local.scroll(2),此时指针在第六条位置;
  • 第三次使用fetchone(),打印出第六条位置的数据,此时指针在第七条位置;
  • 输入local.scroll(-3),此时指针在第四条位置;
  • 第三次使用fetchone(),打印出第四条位置的数据,此时指针在第五条位置;

以上介绍的是scroll(value)方法的相对运动的方式,还有一种方式是绝对移动,该方式不会受到指针当前位置的干扰也是常用的方法之一,这个时候需要一个参数absolute;

这个方法使用之前需要注意的是,在python中,序列对象是的顺序是从0开始的;

如下图:

 

这里就可以根据指定的位置来打印出该位置的数据了;

五、python操作--更新数据

更新数据就很简单了,用法和插入数据类似,都是先给实例对象查询好的值,然后在通过指针再将其打印出来;

如下图:

 

这里和插入数据一样,要想在mysql中查询已更新的数值,需要用到commit()数据提交操作;如下图:

 

六、python操作--删除数据

删除数据亦是如此,就是将引号内换成mysql的增删查改命令而已,这里就不多讲了:

 

删除后查看: