PyMySQL——python操作数据库

摘自:RUNOOB.COM

安装

PyMySQL

首先安装PyMySQL,直接输入pip install PyMysQL即可

MySQL-Python

还要确保你的MySQL数据支持python连接,点击下载

注意:如果你想使用python的MySQLdb模块,你必须安装并使用python2.6以上,python3以下的版本,python3及以后的版本都不会再支持MySQLdb模块

基础操作

数据库的基础操作的流程大同小异

>>>>>

数据库连接

db = pymysql.connect("localhost","root","*****","TESTDB")
param1:host类型
param2:用户名,如果是root操作,就是root(也就是说,一般你在个人windows下进行操作,就是root)
param3:用户名的密码,如果不知道是什么密码,请移步看初始化的步骤,我强调过的。
param4:要连接的数据库名称(前提是必须先创建此数据库,不然无法连接,也不会自动创建)

获取游标

db = pymysql.connect("localhost","root","******","TESTDB")
cursor = db.cursor()
使用cursor()方法会返回一个对象,后面对数据库的操作都是对获取的游标进行的操作,我将这个游标当作数据库的“地址”看待,或者直接将它看成数据库也行,不影响后面的操作。

对数据库的操作基本上都是将数据库的命令写道sql变量中然后放到execute方法中,可以不用每条execute后面都紧接着使用commit方法提交,但直到提交完成,这些操作才会在数据库中生效:也就是说,比如你在前面先创建了一个表并exectute,虽然没有提交到数据库,但只要execute,后面的操作会认为你的动作已经完成,最后一次commit就会全部生效

创建数据库表

#重复的代码不再重复写,只写伪代码
#连接数据库
...
#创建一个游标对象
...
#创建表
sql = """CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20) NOT NULL,
AGE INT)"""
cursor.execute(sql)
#关闭数据库
db.close()

数据库插入

#重复的代码不再重复写,只写伪代码
#连接数据库
...
#创建一个游标对象
...
#创建表
...
#插入数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE) VALUES('Mac','Monhan',20)"""
try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()
db.close()
多解
可以写成另外一种形式
#前面步骤都不变
#插入数据
sql = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE) \
VALUES('%s','%s','%d')%('Mac','Mohan',20)"
#后面也不变
try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()
db.close()
其实values('...(format)')%(a,b,...)里的a,b可以引入变量

数据库查询

  • fetchone():获取下一个查询结果集,是一个对象
  • fetchall():接受全部的返回结果行
  • rowcount:返回执行execute()方法后影响的行数,只读
#前面都不变
sql = """SELECT * FROM EMPLOYEE WHERE AGE > 20"""
#或者sql = "SELECT * FROM EMPLOYEE WHERE AGE > '%d'"%20
try:
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[3]
except:
    print("Error:unable to fetch data")
db.close()

数据库更新(更改)

除了sql的操作语句不一样,其他都一样
#前面不变
sql = """UPDATE EMPLOYEE SET AGE = AGE+1 WHERE FIRST_NAME = "Mac""""
...
except:
    db.rollback()
#后面也不变

删除操作

除了sql的操作语句不一样,其他都一样
#前面都不变
sql = """DELETE FROM EMPLOYEE WHERE AGE > 20"""
...
except:
    db.rollback()
#后面也不变

rollback()

当调用rollback()方法时,会滚回当前游标的所有操作,也就是撤销所有操作

后记

execute 和 executemany

顾名思义:execute执行一次命令,executemany就是执行多次命令,但还是有区别
execute
cursor.execute("INSERT INTO COUPON(ID,CODE) VALUES(%s,%s)",(1,"afkjdiejh3"))
Param1:sql操作语句
Param2:一个元组,分别是sql里的变量
注意:我的表中的ID其实为int型,但如果你填写%d或者%i之类的数字类型,你会发现永远会聪(曰)明(DOG)的报错,说需要一个int你却给了一个str(突然脑边环绕一首“削个~椰子皮~你TM却给个梨~”的旋律),所以,不管什么类型,统统是%s,除非你按下面这样写
cursor.execute("INSERT INTO COUPON(ID,CODE) VALUES(%d,%s)&(1,'afkjdiejh3')")
你要是非要这样写,我也拦不住你,看你批量数据怎么办
executemany
cursor.execute("INSERT INTO COUPON(ID,CODE) VALUES(%s,%s)",[(1,"afkjdiejh3"),(2,"fajflsdjfso2")])
Param1:sql操作语句
Param2:包含多个元组的数组,每个元组里分别是sql里的变量
注意(Again!):变量类型都写%s,不然就是作死了……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值