Python模块之操作数据库MySQL篇

目录

一、安装PyMySQL模块

二、操作数据库

1、连接数据库

2、执行sql语句:execute和executemany

3、创建数据表:

三、操作MySQL数据表 

1、新增数据

2、查询数据

3、修改数据 

4、删除数据

5、踩到的坑:


一、安装PyMySQL模块

pip install PyMySQL

二、操作数据库

1、连接数据库

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

获取游标:conn.cursor()

import pymysql
#连接数据库,参数1:主机名;参数2:用户名;参数3:用户密码;参数4:数据库名称
db=pymysql.connect('localhost','root','root','studyPython')
#创建游标
cur=db.cursor()
#查询版本
cur.execute('SELECT VERSION()')
#获取查询结果
data=cur.fetchone()
print('DataBase version:%s'%data)
#关闭连接
db.close()
#连接另一台电脑上的数据库
db=pymysql.connect(host="111.118.8.124",user="root",
                   password="111",port=3306)
#注意:
#1- host=ip地址,通过ipconfig查看ipv4获悉
#2- 被连接的数据库用户应设置 localhost=%

2、执行sql语句:execute和executemany

execute(query,args=None)

函数作用:执行单条的sql语句,执行成功后返回受影响的行数

参数说明:

query:要执行的sql语句,字符串类型

args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符

executemany(query,args=None)

函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数

参数说明:

query:要执行的sql语句,字符串类型

args:嵌套的序列或映射,用于query的参数值

注意:
1.数据库性能瓶颈很大一部份就在于网络IO和磁盘IO,将多个sql语句放在一起,只执行一次IO,可以有效的提升数据库性能。推荐此方法

2.用executemany()方法一次性批量执行sql语句,固然很好,但是当数据一次传入过多到server端,可能造成server端的buffer溢出,也可能产生一些意想不到的麻烦。所以,合理、分批次使用executemany是个合理的办法

3、创建数据表:

SQL语句:

CREATE TABLE 表名(

字段名 字段属性

PRIMARY KEY (id) #设置主键

)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

在创建数据表前,先删除以防报错。删除数据表SQL语句:

DROP TABLE IF EXISTS 表名

import pymysql
#连接数据库
db=pymysql.connect('localhost','root','root','studyPython')
#创建游标
cur=db.cursor()
#执行SQL语句,如果表存在,则删除
cur.execute('DROP TABLE IF EXISTS 'books')
#定义创建表的SQL语句
sql="""
CREATE TABLE books(
    id int(8) NOT NULL AUTO_INCREMENT, #ID字段,属性整数类型8位,非空,自增加
    name varchar(50) NOT NULL, #NAME字段,属性字符串类型50位,非空
    categore varchar(50) NOT NULL,
    price decimal(10,2) DEFAULT NULL,
    publish_time date DEFAULT NULL,
    PRIMARY KEY (id) #主键id
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
"""
#执行SQL语句,创建数据表
cur.execute(sql)
#关闭数据库连接
db.closer()

三、操作MySQL数据表 

1、新增数据

可以使用excute()方法添加一条记录,也可以使用excutemany()方法批量添加多条记录。

SQL语句:

excutemany(operation,seq_of_params)

import pymysql
#连接数据库
db=pymysql.connect('localhost','root','root','studyPython',charset='utf8')
#创建游标
cur=db.cursor()

#数据是列表嵌套元组的形式
data=[('零基础学python','python','79.80','2018-5-20'),
        ('python入门到精通','python','69.80','2018-6-18'),
        ('php开发','php','79.80','2016/5/21'),
        ('零基础java','java','59.80','2017-5-21')]
try:
    #执行SQL语句,新增数据
    res=cur.executemany('insert into books(name,category,price,publish_time) values (%s,%s,%s,%s)',data) #返回执行行数
    #提交事务
    db.commit()
except:
    #发生错误时回滚
    db.rollback()
#关闭数据库连接
db.closer()

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

新增数据可以是列表嵌套列表,执行完sql语句后,要用conn.commit()提交,否则导入不进数据。

2、查询数据

使用execute()函数得到的只是受影响的行数,并不能真正拿到查询的内容。cursor对象还提供了3种提取数据的方法:fetchone、fetchmany、fetchall.。每个方法都会导致游标动,所以必须注意游标的位置。

cursor.fetchone():获取游标所在处的一行数据,返回元组,没有返回None

cursor.fetchmany(size):接受size行返回结果行。如果size大于返回的结果行的数量,则会返回cursor.arraysize条数据。

cursor. fetchall():接收全部的返回结果行。

import pymysql

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

cur.execute("select * from user;")

#fetchone()
while 1:
    res1=cur.fetchone()
    if res is None:
        #表示已经取完结果集
        break
    print (res1)

#fetchall()取所有数据
resTuple=cur.fetchall()
for res in resTuple:
    print(res)
print(type(resTuple))
print (‘共%d条数据’%len(resTuple))

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

3、修改数据 

'''更新多条数据'''
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执行成功')

4、删除数据

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

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

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

5、踩到的坑:

sql语句中,字符要用双引号。

cur.executemany(sql, data) # data可以是列表嵌套列表,要提交事务conn.commit()才能插入数据 

单引号用tab键上方的`代替。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值