python3基础:操作mysql数据库

python3基础:操作mysql数据库mysql登陆基本操作:登陆:mysql-uroot-h127.0.0.1-P3306-pmysql-uroot-p(本机不用写host)退出mysql:ctrl+z+回车,或者exit端口号默认是3306,但是可以通过安装目录下的配置文件修改。使用流程引用API模块获取与数据库的连接执行sql语句与存储过程关闭数据库连接安装pymysqlpython3与…

大家好,又见面了,我是你们的朋友全栈君。

mysql登陆

基本操作:
登陆:mysql -uroot -h127.0.0.1 -P3306 -p
mysql -uroot -p(本机不用写host)
退出mysql:ctrl+z+回车,或者exit
端口号默认是3306,但是可以通过安装目录下的配置文件修改。

使用流程

  • 引用API模块
  • 获取与数据库的连接
  • 执行sql语句与存储过程
  • 关闭数据库连接

安装pymysql

python3 与MySQL 进行交互编程需要安装 pymysql 库,故首先使用如下命令安装pymysql
–>pip install pymysql
如果电脑中py2和py3共存的话,安装失败时请参考之前的博客安装方法

pymysql.connect()连接数据库函数

代码示例:

import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
print (conn)
print (type(conn))

在这里插入图片描述

conn.cursor():获取游标

要想操作数据库,光连接数据是不够的,必须拿到操作数据库的游标,才能进行后续的操作,比如读取数据、添加数据。通过获取到的数据库连接实例conn下的cursor()方法来创建游标。游标用来接收返回结果
代码示例:

import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#获取游标
cursor=conn.cursor()
print(cursor)

在这里插入图片描述
说明:cursor返回一个游标实例对象,其中包含了很多操作数据的方法,比如执行sql语句。

执行sql语句execute和executemany

  • execute(query,args=None)
  • 函数作用:执行单条的sql语句,执行成功后返回受影响的行数
  • 参数说明:
    query:要执行的sql语句,字符串类型
    args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符
  1. executemany(query,args=None)
  • 函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数
  • 参数说明
    query:要执行的sql语句,字符串类型
    args:嵌套的序列或映射,用于query的参数值

注意
1.数据库性能瓶颈很大一部份就在于网络IO和磁盘IO,将多个sql语句放在一起,只执行一次IO,可以有效的提升数据库性能。推荐此方法
2.用executemany()方法一次性批量执行sql语句,固然很好,但是当数据一次传入过多到server端,可能造成server端的buffer溢出,也可能产生一些意想不到的麻烦。所以,合理、分批次使用executemany是个合理的办法

创建数据库

代码示例:

'''创建数据库'''
import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect('localhost',user = "root",passwd = "123456")
#获取游标
cursor=conn.cursor()
#创建pythonBD数据库
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建pythonBD数据库成功')

在这里插入图片描述

创建表

代码示例:

import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#获取游标
cursor=conn.cursor()
print(cursor)

#创建user表
cursor.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cursor.execute(sql)
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建数据表成功')

插入单条数据

代码示例:

'''插入单条数据'''
import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')

cur=conn.cursor()#获取游标

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

insert=cur.execute("insert into user values(1,'tom',18)")
print('添加语句受影响的行数:',insert)

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

批量插入多条数据

代码示例:

'''插入多条数据'''
import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
insert=cur.executemany(sql,[(4,'wen',20),(5,'tom',10),(6,'test',30)])
print ('批量插入返回受影响的行数:',insert)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

注意:批量插入多条sql语句采用的是executemany(sql,args)函数,返回受影响的行数。args参数是一个包含多个元组的列表,每个元组对应一条mysql中的一条数据。这里的%s不需要加引号,否则插入数据的数据会类型错误

查询数据

使用execute()函数得到的只是受影响的行数,并不能真正拿到查询的内容。cursor对象还提供了3种提取数据的方法:fetchone、fetchmany、fetchall.。每个方法都会导致游标动,所以必须注意游标的位置。
cursor.fetchone():获取游标所在处的一行数据,返回元组,没有返回None
cursor.fetchmany(size):接受size行返回结果行。如果size大于返回的结果行的数量,则会返回cursor.arraysize条数据。
cursor. fetchall():接收全部的返回结果行。

代码示例:fetchone

'''fetchone'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

cur.execute("select * from user;")
while 1:
    res=cur.fetchone()
    if res is None:
        #表示已经取完结果集
        break
    print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

注意:从execute()函数的查询结果中取数据,以元组的形式返回游标所在处的一条数据,如果游标所在处没有数据,将返回空元组,该数据执行一次,游标向下移动一个位置。fetchone()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

代码示例:fetchmany
‘’‘fetchmany’’’
import pymysql
#打开数据库连接
conn=pymysql.connect(‘localhost’,‘root’,‘123456’)
conn.select_db(‘pythondb’)
#获取游标
cur=conn.cursor()

cur.execute(“select * from user”)
#取3条数据
resTuple=cur.fetchmany(3)
print(type(resTuple))
for res in resTuple:
print (res)

cur.close()
conn.commit()
conn.close()
print(‘sql执行成功’)
在这里插入图片描述
注意:从exceute()函数结果中获取游标所在处的size条数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果size大于有效的结果行数,将会返回cursor.arraysize条数据,但如果游标所在处没有数据,将返回空元组。查询几条数据,游标将会向下移动几个位置。fetmany()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

代码示例:fetchall
‘’‘fetchall’’’
import pymysql
#打开数据库连接
conn=pymysql.connect(‘localhost’,‘root’,‘123456’)
conn.select_db(‘pythondb’)
#获取游标
cur=conn.cursor()

cur.execute(“select * from user”)
#取所有数据
resTuple=cur.fetchall()
print(type(resTuple))
print (‘共%d条数据’%len(resTuple))

cur.close()
conn.commit()
conn.close()
print(‘sql执行成功’)
在这里插入图片描述

注意:获取游标所在处开始及以下所有的数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果游标所在处没有数据,将返回空元组。执行完这个方法后,游标将移动到数据库表的最后

更新数据

代码示例:更新单条数据

'''更新单条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#更新一条数据
update=cur.execute("update user set age=100 where name='kongsh'")
print ('修改后受影响的行数为:',update)
#查询一条数据
cur.execute('select * from user where name="kongsh";')
print(cur.fetchone())
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述
代码示例:更新多条数据

'''更新多条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#更新前查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#更新2条数据
sql="update user set age=%s where name=%s"
update=cur.executemany(sql,[(15,'kongsh'),(18,'wen')])

#更新2条数据后查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

删除数据

代码示例:删除单条数据

'''删除单条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#删除前查询所有数据
cur.execute("select * from user;")
print('删除前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#删除1条数据
cur.execute("delete from user where id=1")

#删除后查询所有数据
cur.execute("select * from user;")
print('删除后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述
代码示例:删除多条数据

'''删除多条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#删除前查询所有数据
cur.execute("select * from user;")
print('删除前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#删除2条数据
sql="delete from user where id=%s"
cur.executemany(sql,[(3),(4)])

#删除后查询所有数据
cur.execute("select * from user;")
print('删除后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

事务回滚

代码示例:’’‘事务回滚’’’

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#更新表中第1条数据
cur.execute("update user set name='xiaoxiaoxiaoxiaoren' where id=5")

#修改后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)
#回滚事务
conn.rollback()
cur.execute("select * from user;")
print('回滚事务后的数据为:')
for res in cur.fetchall():
      print (res)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

练习:插入100条数据到数据库

代码示例:每次插入一条

'''插入100条数据到数据库(每次插入一条)'''
import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
for i in range(100):
      random.shuffle(words)#打乱顺序
      cur.execute(sql,(i+1,"".join(words[:5]),random.randint(0,80)))

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述
代码示例:一次插入多条

'''插入100条数据到数据库(一次插入多条)'''
import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
random.shuffle(words)#打乱顺序
cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137534.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【C语言】的%*d、%.*s等详解:「建议收藏」

    目录:0.前言【精简版】:时间少的看这里:时间长的可以看我下面的啰嗦:1.必备入门小知识:2.正题1:scanf(1)%*d被枪毙了:(2)【%.*d】的队友被枪毙了:2.正题2:printf就不讲了,前面的【前言】似乎讲得很明白了吧。0.前言【精简版】:其实网上也有很多关于这方面的解释,但是总会让新手甚至小老手有些迷茫,比如网上有一种解释就说:忽略……你忽略啥啊你…时间少的看这里:<1>scanf:注意:在scanf里只有%*d和%.*d有意义,其他的%*f,%

  • java栈堆方法区分别存放的东西_java创建栈和堆对象

    java栈堆方法区分别存放的东西_java创建栈和堆对象之前给大家讲了一下java栈和堆的区别,下面又要给大家详细的讲一下java栈和堆分别存放的是什么,一起来详细的了解一下吧!一、java栈、堆存放的是什么?在java当中,栈中,存放的是基本数据类型和堆中对象的引用,而,堆中,存放的则是对象。其他:一个对象的大小,是不能够估计的,我们又可以这样说,是能够动态变化的,可是在栈中,一个对象就只对应了一个4btye的引用,这也是堆和栈分离的好处。那么相信很…

  • xshell连接虚拟机步骤_安装虚拟机后如何使用

    xshell连接虚拟机步骤_安装虚拟机后如何使用Xshell连接虚拟机1、打开虚拟机终端,输入下面命令,找到ens33对应的IP地址,如图ifconfig2、打开Xshell,打开文件–>新建3、填写名称,主机这里填入刚才的IP,点击连接4、输入登录的用户名,点击确定5、输入密码,点击确定6、连接成功,可以开始使用…

  • JS闭包理解_闭包的定义

    JS闭包理解_闭包的定义一、变量作用域   全局变量   局部变量函数内部可以直接读取全局变量,函数外部无法读取函数内部的局部变量二、从函数外部读取局部变量解决方法:在函数内部在定义一个函数functionf1(){   varn=1;   functionf2(){       alert(n);   }}在上诉代码中,函数f2被包括在函数f1内部,这…

    2022年10月25日
  • TP框架自带的正则验证的规则

    TP框架自带的正则验证的规则

  • javase学习笔记

    javase学习笔记01.01_计算机基础知识(计算机概述)(了解)A:什么是计算机?计算机在生活中的应用举例计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。应用举例1:科学计算2、数据处理3、自动控制4、计算机辅助设计…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号