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

python3基础:操作mysql数据库[浅显易懂]mysql登录基本操作:登录:mysql-uroot-h127.0.0.1-P3306-pmysql-uroot-p(本机不用写host)退出mysql:ctrl+z+回车,或则exit端标语默认是3306,并且可以通过安装目录下的配置文件更改。使用流程引用API模块获取与数据库的联接执行sql句子与储存过程关掉数据库联接安装pymysqlpython3与…

图片[1]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

你们好,我是构架君,一个会写代码吟诗的构架师。明天说一说python3基础:操作mysql数据库[浅显易懂],希望还能帮助你们进步!!!

mysql登录

基本操作:

登录:mysql-uroot-h127.0.0.1-P3306-p

mysql-uroot-p(本机不用写host)

退出mysql:ctrl+z+回车,或则exit

端标语默认是3306,并且可以通过安装目录下的配置文件更改。

使用流程安装pymysql

python3与MySQL进行交互编程须要安装pymysql库,故首先使用如下命令安装pymysql

–>pipinstallpymysql

假如笔记本中py2和py3共存的话,安装失败时请参考之前的博客安装方式

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

代码示例

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

只看到从构架师办公室传来构架君的声音:

建平督邮道,鱼复永安宫。有谁来对下联或上联?

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

conn.cursor():获取游标

要想操作数据库sql 查不到数据 返回0,光联接数据是不够的,必须领到操作数据库的游标,能够进行后续的操作,例如读取数据、添加数据。通过获取到的数据库联接实例conn下的cursor()方式来创建游标。游标拿来接收返回结果

代码示例:

此代码由Java架构师必看网-架构君整理
import pymysql #打开数据库连接 conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb") #获取游标 cursor=conn.cursor() print(cursor)

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

说明:cursor返回一个游标实例对象,其中包含了好多操作数据的方式,例如执行sql词句。

执行sql句子execute和executemanyexecutemany(query,args=None)

注意:

1.数据库性能困局很大一部分就在于网路IO和c盘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数据库成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

创建表

代码示例:

此代码由Java架构师必看网-架构君整理
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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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:

图片[6]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

#表示已经取完结果集 break print (res) cur.close() conn.commit() conn.close() print('sql执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

注意:从execute()函数的查询结果中取数据,以元组的方式返回游标所在处的一条数据,假如游标所在处没有数据,将返回空元组,该数据执行一次,游标向上联通一个位置。fetchone()函数必须跟exceute()函数结合使用,但是在exceute()函数以后使用

代码示例:fetchmany

‘’‘fetchmany’’’

importpymysql

#打开数据库联接

conn=pymysql.connect(‘localhost’,‘root’,‘123456’)

conn.select_db(‘pythondb’)

#获取游标

cur=conn.cursor()

cur.execute(“select*fromuser”)

#取3条数据

resTuple=cur.fetchmany(3)

print(type(resTuple))

forresinresTuple:

print(res)

cur.close()

conn.commit()

conn.close()

print(‘sql执行成功’)

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

注意:从exceute()函数结果中获取游标所在处的size条数据,并以元组的方式返回,元组的每一个元素都也是一个由一行数据组成的元组,假如size小于有效的结果行数,将会返回cursor.arraysize条数据sql 查不到数据 返回0,但若果游标所在处没有数据,将返回空元组。查询几条数据,游标将会向上联通几个位置。fetmany()函数必须跟exceute()函数结合使用,但是在exceute()函数以后使用

代码示例:fetchall

‘’‘fetchall’’’

importpymysql

#打开数据库联接

conn=pymysql.connect(‘localhost’,‘root’,‘123456’)

conn.select_db(‘pythondb’)

#获取游标

cur=conn.cursor()

cur.execute(“select*fromuser”)

#取所有数据

resTuple=cur.fetchall()

print(type(resTuple))

print(‘共%d条数据’%len(resTuple))

cur.close()

conn.commit()

conn.close()

print(‘sql执行成功’)

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行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执行成功')

图片[2]-使用流程引用API模块获取与数据库的连接执行sql语句与存储过程-唐朝资源网

猜您喜欢:

© 版权声明
THE END
喜欢就支持一下吧
点赞221赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容