python操作mysql数据库Python标准的数据库接口是PythonDB-API,PythonDB-API为开发者提供了数据库应用编程接口。Python数据库接口支持很多数据库,您可以选择适合您项目的数据库:GadFlymSQLMySQLPostgreSQLMicrosoftSQLServer2000InformixInterbaseOracleSybase您可以访问Python数据库接口和API查看支持的数据库的详细列表。不同的数据库需要下载不同的DBAPI模块。比如需要访问Oracle数据库和Mysql数据,就需要下载Oracle和MySQL数据库模块。DB-API是一种规范。它定义了一系列必要的对象和数据库访问方法,以便为各种底层数据库系统和各种数据库接口程序提供一致的访问接口。Python的DB-API实现了大部分数据库的接口,使用它连接到各个数据库后,就可以对各个数据库进行相同的操作。PythonDB-API使用流程:导入API模块。获取到数据库的连接。执行SQL语句和存储过程。关闭数据库连接。什么是MySQLdb?MySQLdb是Python连接Mysql数据库的接口。它实现了Python数据库API规范V2.0,基于MySQLCAPI。如何安装MySQLdb?为了使用DB-API编写MySQL脚本,您必须确保安装了MySQL。复制以下代码执行:!/usr/bin/python--coding:UTF-8--importMySQLdb如果执行后输出如下,说明你没有安装MySQLdb模块:Traceback(mostrecentcalllast):File“test.py”,line3,inimportMySQLdbImportError:NomodulenamedMySQLdb要安装MySQLdb,请访问http://sourceforge.net/projec...,(Linux平台可以访问:https://pypi.python.org/pypi/...,分为预编译二进制文件和源码安装包。如果您选择二进制分发,安装过程将根据基本安装提示完成。如果从源代码安装,则需要切换到MySQLdb发行版的顶级目录并键入以下命令:$gunzipMySQL-python-1.2.2.tar.gz$tar-xvfMySQL-python-1.2.2.tar$cdMySQL-python-1.2.2$pythonsetup.pybuild$pythonsetup.pyinstall注意:请确保您有root权限来安装上述模块。在连接数据库之前,请确认以下内容:您已经创建了数据库TESTDB。在TESTDB数据库中,您已经创建了表EMPLOYEEEMPLOYEE。该表的字段是FIRST_NAME、LAST_NAME、AGE、SEX和INCOME。连接数据库TESTDB的用户名为“testuser”,密码为“test123”。可以自己设置,也可以直接使用root用户名和密码。Mysql数据库用户授权,请使用Grant命令。PythonMySQLdb模块已安装在您的机器上。如果对sql语句不熟悉,可以访问我们的SQL基础教程示例:下面示例链接Mysql的TESTDB数据库:!/usr/bin/python--coding:UTF-8--importMySQLdb打开数据库连接db=MySQL数据库。connect("localhost","testuser","test123","TESTDB")使用cursor()方法获取操作cursor=db.cursor()使用execute方法执行SQL语句cursor.execute("SELECTVERSION()")使用fetchone()方法获取数据库。data=cursor.fetchone()print"Databaseversion:%s"%data关闭数据库连接db.close()执行上面的脚本,输出结果如下:Databaseversion:5.0.45创建数据库表如果数据库连接存在,我们可以使用execute()方法为数据库创建表,创建表EMPLOYEE如下:!/usr/bin/python--coding:UTF-8--importMySQLdbopendatabaseconnectiondb=MySQLdb.connect("localhost","testuser","test123","TESTDB")使用cursor()方法获取操作游标cursor=db.cursor()如果数据表已经存在,使用execute()方法删除表格。cursor.execute("DROPTABLEIFEXISTSEMPLOYEE")创建数据表SQL语句sql="""CREATETABLEEMPLOYEE(FIRST_NAMECHAR(20)NOTNULL,LAST_NAMECHAR(20),AGEINT,SEXCHAR(1),INCOMEFLOAT)"""cursor.execute(sql)关闭数据库连接db.close()数据库插入操作下面的例子使用SQLINSERT语句向EMPLOYEE表中插入记录:!/usr/bin/python--编码:UTF-8--importMySQLdbopendatabaseconnectiondb=MySQLdb.connect("localhost","testuser","test123","TESTDB")使用cursor()方法获取操作游标cursor=db.cursor()SQLinsertstatementsql="""INSERTINTOEMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES('Mac','Mohan',20,'M',2000)"""尝试:执行sql语句cursor.execute(sql)提交到数据库Executedb.commit()except:Rollbackincasetheanyerrordb.rollback()closethedatabaseconnectiondb.close()上面的例子也可以这样写:!/usr/bin/python--编码:UTF-8--im端口MySQLdb打开数据库连接db=MySQLdb.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)提交到数据库执行db.commit()except:出错时回滚db.rollback()关闭数据库连接db.close()实例:下面的代码使用变量向SQL语句传递参数:...user_id=“test123”password=“password”con.execute('insertintoLoginvalues("%s","%s")'%(user_id,password))...数据库查询操作Python查询Mysql使用fetchone()方法获取单条数据,使用fetchall()方法获取多条数据fetchone():该方法获取下一个查询结果集。结果集是一个对象fetchall():接收所有返回的结果行。rowcount:这是一个只读属性,返回执行execute()方法后受影响的行数。示例:查询EMPLOYEE表中salary(薪水)字段大于1000的所有数据:!/usr/bin/python--coding:UTF-8--importMySQLdb打开数据库连接db=MySQLdb.connect("localhost","testuser","test123","TESTDB")使用cursor()方法获取操作游标cursor=db.cursor()SQL查询语句sql="SELECT*FROMEMPLOYEEWHEREINCOME>'%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]printresultprint“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数据库更新操作更新操作用于更新数据表在下面的例子中,t中的所有SEX字段TESTDB表改为'M',AGE字段加1:!/usr/bin/python--coding:UTF-8--importMySQLdb打开数据库连接db=MySQLdb.connect("localhost","testuser","test123","TESTDB")使用cursor()方法获取操作游标cursor=db.cursor()SQL更新语句sql="UPDATEEMPLOYEESETAGE=AGE+1WHERESEX='%c'"%('M')try:执行SQL语句cursor.execute(sql)并提交给数据库执行linedb.commit()except:rollbackwhenerrordb.rollback()closesthedatabaseconnectiondb.close()执行transaction事务机制保证数据一致性事务应该有4个属性:原子性、一致性、隔离性、持久性.这四种特性通常被称为ACID特性。原子性。事务是一个不可分割的工作单元,事务中包含的所有操作要么执行要么不执行。一致性。事务必须将数据库从一种一致状态更改为另一种一致状态。一致性和原子性是密切相关的。隔离。一个事务的执行不能被其他事务干扰。即一个事务内使用的操作和数据与其他并发事务隔离,并发执行的事务之间不能相互干扰。耐用性。持久性,也称为永久性,是指一旦事务被提交,它对数据库中数据的改变应该是永久性的。随后的其他操作或故障不应对其产生任何影响。PythonDBAPI2.0的事务提供了commit和rollback两种方法。例子:SQL删除记录语句sql="DELETEFROMEMPLOYEEWHEREAGE>'%d'"%(20)try:执行SQL语句cursor.execute(sql)向数据库提交db.commit()except:错误时回滚发生db.rollback()对于支持事务的数据库,在Python数据库编程中,创建游标时,会自动启动一个不可见的数据库事务。commit()方法执行游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每个方法都会启动一个新事务。
