Python3MySQL数据库连接Python3MySQL数据库连接本⽂我们为⼤家介绍Python3使⽤PyMySQL连接数据库,并实现简单的增删改查。什么是PyMySQL?PyMySQL是在Python3.x版本中⽤于连接MySQL服务器的⼀个库,Python2中则使⽤mysqldb。PyMySQL遵循Python数据库APIv2.0规范,并包含了pure-PythonMySQL客户端库。PyMySQL安装在使⽤PyMySQL之前,我们需要确保PyMySQL已安装。PyMySQL下载地址:。如果还未安装,我们可以使⽤以下命令安装最新版的PyMySQL:$pipinstallPyMySQL如果你的系统不⽀持pip命令,可以使⽤以下⽅式安装:1、使⽤git命令下载安装包安装(你也可以⼿动下载):$gitclone、如果需要制定版本号,可以使⽤curl命令来安装:$#X.X为PyMySQL的版本号$curl-L|tarxz$cdPyMySQL*$python3setup.pyinstall$#现在你可以删除PyMySQL*⽬录注意:请确保您有root权限来安装上述模块。安装的过程中可能会出现ImportError:Nomodulenamedsetuptools的错误提⽰,意思是你没有安装setuptools,你可以访问找到各个系统的安装⽅法。Linux系统安装实例:$wget数据库连接连接数据库前,请先确认以下事项:您已经创建了数据库TESTDB.在TESTDB数据库中您已经创建了表EMPLOYEEEMPLOYEE表字段为FIRST_NAME,LAST_NAME,AGE,SEX和INCOME。连接数据库TESTDB使⽤的⽤户名为testuser,密码为test123,你可以可以⾃⼰设定或者直接使⽤root⽤户名及其密码,Mysql数据库⽤户授权请使⽤Grant命令。在你的机⼦上已经安装了PythonMySQLdb模块。如果您对sql语句不熟悉,可以访问我们的SQL基础教程实例:以下实例链接Mysql的TESTDB数据库:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法创建⼀个游标对象cursorcursor=db.cursor()#使⽤execute()⽅法执⾏SQL查询cursor.execute(SELECTVERSION())#使⽤fetchone()⽅法获取单条数据.data=cursor.fetchone()print(Databaseversion:%s%data)#关闭数据库连接db.close()执⾏以上脚本输出结果如下:Databaseversion:5.5.20-log创建数据库表如果数据库连接存在我们可以使⽤execute()⽅法来为数据库创建表,如下所⽰创建表EMPLOYEE:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法创建⼀个游标对象cursorcursor=db.cursor()#使⽤execute()⽅法执⾏SQL,如果表存在则删除cursor.execute(DROPTABLEIFEXISTSEMPLOYEE)#使⽤预处理语句创建表sql=CREATETABLEEMPLOYEE(FIRST_NAMECHAR(20)NOTNULL,LAST_NAMECHAR(20),AGEINT,SEXCHAR(1),INCOMEFLOAT)cursor.execute(sql)#关闭数据库连接db.close()数据库插⼊操作以下实例使⽤执⾏SQLINSERT语句向表EMPLOYEE插⼊记录:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法获取操作游标cursor=db.cursor()#SQL插⼊语句sql=INSERTINTOEMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES('Mac','Mohan',20,'M',2000)try:#执⾏sql语句cursor.execute(sql)#提交到数据库执⾏db.commit()except:#如果发⽣错误则回滚db.rollback()#关闭数据库连接db.close()以上例⼦也可以写成如下形式:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法获取操作游标cursor=db.cursor()#SQL插⼊语句sql=INSERTINTOEMPLOYEE(FIRST_NAME,\LAST_NAME,AGE,SEX,INCOME)\VALUES('%s','%s','%d','%c','%d')%\('Mac','Mohan',20,'M',2000)try:#执⾏sql语句cursor.execute(sql)#执⾏sql语句db.commit()except:#发⽣错误时回滚db.rollback()#关闭数据库连接db.close()以下代码使⽤变量向SQL语句中传递参数:..................................user_id=test123password=passwordcon.execute('insertintoLoginvalues(%s,%s)'%\(user_id,password))..................................数据库查询操作Python查询Mysql使⽤fetchone()⽅法获取单条数据,使⽤fetchall()⽅法获取多条数据。fetchone():该⽅法获取下⼀个查询结果集。结果集是⼀个对象fetchall():接收全部的返回结果⾏.rowcount:这是⼀个只读属性,并返回执⾏execute()⽅法后影响的⾏数。实例:查询EMPLOYEE表中salary(⼯资)字段⼤于1000的所有数据:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法获取操作游标cursor=db.cursor()#SQL查询语句sql=SELECT*FROMEMPLOYEE\WHEREINCOME'%d'%(1000)try:#执⾏SQL语句cursor.execute(sql)#获取所有记录列表results=cursor.fetchall()forrowinresults:fname=row[0]lname=row[1]age=row[2]sex=row[3]income=row[4]#打印结果print(fname=%s,lname=%s,age=%d,sex=%s,income=%d%\(fname,lname,age,sex,income))except:print(Error:unabletofecthdata)#关闭数据库连接db.close()以上脚本执⾏结果如下:fname=Mac,lname=Mohan,age=20,sex=M,income=2000数据库更新操作更新操作⽤于更新数据表的的数据,以下实例将TESTDB表中的SEX字段全部修改为'M',AGE字段递增1:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法获取操作游标cursor=db.cursor()#SQL更新语句sql=UPDATEEMPLOYEESETAGE=AGE+1WHERESEX='%c'%('M')try:#执⾏SQL语句cursor.execute(sql)#提交到数据库执⾏db.commit()except:#发⽣错误时回滚db.rollback()#关闭数据库连接db.close()删除操作删除操作⽤于删除数据表中的数据,以下实例演⽰了删除数据表EMPLOYEE中AGE⼤于20的所有数据:#!/usr/bin/python3importpymysql#打开数据库连接db=pymysql.connect(localhost,testuser,test123,TESTDB)#使⽤cursor()⽅法获取操作游标cursor=db.cursor()#SQL删除语句sql=DELETEFROMEMPLOYEEWHEREAGE'%d'%(20)try:#执⾏SQL语句cursor.execute(sql)#提交修改db.commit()except:#发⽣错误时回滚db.rollback()#关闭连接db.close()执⾏事务事务机制可以确保数据⼀致性。事务应该具有4个属性:原⼦性、⼀致性、隔离性、持久性。这四个属性通常称为ACID特性。原⼦性(atomicity)。⼀个事务是⼀个不可分割的⼯作单位,事务中包括的诸操作要么都做,要么都不做。⼀致性(consistency)。事务必须是使数据库从⼀个⼀致性状态变到另⼀个⼀致性状态。⼀致性与原⼦性是密切相关的。隔离性(isolation)。⼀个事务的执⾏不能被其他事务⼲扰。即⼀个事务内部的操作及使⽤的数据对并发的其他事务是隔离的,并发执⾏的各个事务之间不能互相⼲扰。持久性(durability)。持续性也称永久性(permanence),指⼀个事务⼀旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。PythonDBAPI2.0的事务提供了两个⽅法commit或rollback。实例#SQL删除记录语句sql=DELETEFROMEMPLOYEEWHEREAGE'%d'%(20)try:#执⾏SQL语句cursor.execute(sql)#向数据库提交db.commit()except:#发⽣错误时回滚db.rollback()对于⽀持事务的数据库,在Python数据库编程中,当游标建⽴之时,就⾃动开始了⼀个隐形的数据库事务。commit()⽅法游标的所有更新操作,rollback()⽅法回滚当前游标的所有操作。每⼀个⽅法都开始了⼀个新的事务。错误处理DBAPI中定义了⼀些数据库操作的错误及异常,下表列出了这些错误和异常:异常描述Warning当有严重警告时触发,例如插⼊数据是被截断等等。必须是StandardError的⼦类。Error警告以外所有其他错误类。必须是StandardError的⼦类。当有数据库接⼜模块本⾝的错误(⽽不是数据库的错误)发⽣时InterfaceError触发。必须是Error的⼦类。DatabaseError和数据库有关的错误发⽣时触发。必须是Error的⼦类。