Python语言实用教程第11章-数据库应用课件

上传人:桔**** 文档编号:567669142 上传时间:2024-07-22 格式:PPT 页数:43 大小:405KB
返回 下载 相关 举报
Python语言实用教程第11章-数据库应用课件_第1页
第1页 / 共43页
Python语言实用教程第11章-数据库应用课件_第2页
第2页 / 共43页
Python语言实用教程第11章-数据库应用课件_第3页
第3页 / 共43页
Python语言实用教程第11章-数据库应用课件_第4页
第4页 / 共43页
Python语言实用教程第11章-数据库应用课件_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《Python语言实用教程第11章-数据库应用课件》由会员分享,可在线阅读,更多相关《Python语言实用教程第11章-数据库应用课件(43页珍藏版)》请在金锄头文库上搜索。

1、第第1111章章 数据库应用数据库应用一一般般高高级级语语言言都都支支持持数数据据库库操操作作,PythonPython对对多多种种数数据据库库操操作作提提供供了了很很好好的的支支持持。PythonPython语语言言标标准准数数据据库库接接口口为为Python Python DB-APIDB-API,Python Python DB-DB-APIAPI为为开开发发人人员员提提供供了了一一致致的的数数据据库库应应用用编编程程接接口口。本本章章主主要要内内容容包包括括:数数据据库库基基本本知知识识、PythonPython数数据据库库编编程程技技术术、多多种种数数据据库库操操作作模模块块的的介介

2、绍绍与与基基本使用等内容。本使用等内容。第第1111章章 数据库应用数据库应用学习重点或难点:学习重点或难点: 关系数据库与关系数据库与SQLSQL语言语言 Python Python数据库编程简介数据库编程简介 通过通过DB-APIDB-API访问数据库访问数据库 Python Python数据库编程实例数据库编程实例学习本章后,将能利用学习本章后,将能利用PythonPython数据库访问技术数据库访问技术来编写数据库应用程序,实现对信息的高级管理功能。来编写数据库应用程序,实现对信息的高级管理功能。第第1111章章 数据库应用数据库应用11.1 关系数据库概述关系数据库概述11.2 Py

3、thon Python数据库编程概述数据库编程概述11.3 Python Python与与ODBCODBC11.4 Python Python与与SQLite3SQLite311.5 Python Python与与MySQLMySQL11.6 Python Python与与SQL ServerSQL Server11.1 关系数据库概述关系数据库概述 从从知知识识的的完完整整性性角角度度考考虑虑,本本节节简简单单介介绍绍关关系系数数据据库库的的基基本本知知识识。主主要要是是关关系系数数据据库库的的定定义义及关系数据库的国际标准及关系数据库的国际标准SQLSQL语言。语言。11.1.1 关系数据

4、库关系数据库数数据据库库(Database)(Database)是是指指长长期期存存储储在在计计算算机机内内的的、有有组组织织的的、可可共共享享的的数数据据集集合合。数数据据以以记记录录(Record)(Record)和和字字段段(Field)(Field)的的形形式式存存储储在在数数据据表表(Table)(Table)中中,由由若若干干个个相相关关联联的的数数据据表表构构成成一一个个数数据据库库。数数据据库库国国际际标标准准操操作作语语言言SQLSQL语语言言的的操操作作对对象象主主要要是是数数据据表表或或视视图图。SQLSQL语语言言可可分分为为:数数据据定定义义语语言言DDLDDL、数数

5、据据操操纵纵语语言言DMLDML、数数据据查查询询语语言言DQLDQL和数据控制语言和数据控制语言DCLDCL四大类。四大类。11.1.2 SQL语言语言1.1.创建数据表创建数据表CREATE CREATE TABLE TABLE 表表名名( (字字段段名名l l 数数据据类类型型 列列级级约约束束条条件件,字字段段名名2 2 数数据据类类型型 列列级级约约束束条条件件,字字段段名名n n 数数据据类类型型 列列级级约约束束条条件件 , , 表表级完整性约束级完整性约束)创建学生信息表创建学生信息表studentstudentcreate create table table student

6、(sno student(sno char(10) char(10) primary primary key,sname key,sname char(20),sage char(20),sage integer,sdept char(10)integer,sdept char(10)11.1.2 SQL语言语言 2.2.修改数据表修改数据表 ALTER TABLE ALTER TABLE 表名表名 ADD ADD 字段名字段名 数据类型数据类型 约束条件约束条件 在学生表在学生表studentstudent中添加一个性别字段中添加一个性别字段ssexssex其其SQLSQL语句为:语句为:

7、ALTER TABLE student add ssex char(2) not null ALTER TABLE student add ssex char(2) not null 删除字段使用的格式为:删除字段使用的格式为:ALTER TABLE ALTER TABLE 表名表名 DROP DROP 字段字段名名 在学生信息表在学生信息表studentstudent中删除一个字段性别中删除一个字段性别ssexssex其其SQLSQL语语句为:句为: ALTER TABLE student DROP ssex ALTER TABLE student DROP ssex11.1.2 SQL语言

8、语言3.3.删除数据表删除数据表 在在SQLSQL语语言言中中使使用用DROP DROP TABLETABLE语语句句删删除除某某个个表表格及表格中的所有记录,其命令格式为:格及表格中的所有记录,其命令格式为:DROP TABLE DROP TABLE 表名表名 在在testtest数数据据库库中中删删除除学学生生表表studentstudent其其SQLSQL语语句句为:为:DROP DROP TABLE studentTABLE student11.1.2 SQL语言语言4.4.向数据表中插入数据向数据表中插入数据 INSERTINSERT语语句句实实现现向向数数据据库库表表格格中中插插入

9、入或或增增加加新新的的数数据行,其据行,其格式如下:格式如下: INSERT INSERT INTO INTO 表表名名( (字字段段名名l,l,字字段段名名n) n) VALUESVALUES( (值值l,l,值值n)n) 例例如如:在在学学生生表表studentstudent中中插插入入一一条条记记录录,其其SQLSQL语语句为:句为: insert insert into into student(sno,sname,sage,sdept) student(sno,sname,sage,sdept) values(20160305,values(20160305,董华董华,19, cs)

10、,19, cs)11.1.2 SQL语言语言5.5.数据更新语句数据更新语句 UPDATEUPDATE语语句句实实现现更更新新或或修修改改满满足足规规定定条条件件的的现现有有记记录,使用格式如下:录,使用格式如下: UPDATE UPDATE 表表名名 SET SET 字字段段名名l=l=新新值值l l ,字字段段名名2=2=新新值值2 WHERE 2 WHERE 条件表达式条件表达式 例如:学生表例如:学生表studentstudent中的中的sagesage加加1 1岁,其岁,其SQLSQL语句为:语句为:Update student set sage=sage+1Update stude

11、nt set sage=sage+111.1.2 SQL语言语言6.6.删除记录语句删除记录语句 DELETEDELETE语语句句删删除除数数据据库库表表格格中中的的行行或或记记录录,其其命令格式如下:命令格式如下: DELETE FROM DELETE FROM 表名表名 WHERE WHERE 条件表达式条件表达式 例例如如:删删除除学学生生表表studentstudent中中的的sagesage字字段段的的值值超过超过2424的记录,其语句为:的记录,其语句为: DELETE FROM student where sage24DELETE FROM student where sage2

12、411.1.2 SQL语言语言7.7.数据查询语言数据查询语言 最基本的最基本的SELECTSELECT查询语句格式:查询语句格式: SELECT SELECT DISTINCT DISTINCT 字字段段名名l,l,字字段段名名2, 2, FROM FROM 表名表名 WHERE WHERE 条件表达式条件表达式 例例如如查查询询出出学学生生表表studentstudent中中的的所所有有姓姓王王的的学学生生信息,其语句为:信息,其语句为: Select Select * * from from student student where where sname sname like lik

13、e 王王%11.2 Python数据库编程概述数据库编程概述 关关系系型型数数据据库库拥拥有有共共同同的的规规范范Python Python Database Database API API Specification Specification V2.0(Python V2.0(Python DB-API)DB-API),MySQLMySQL、OracleOracle等等都都实实现现了了此此规规范范,然然后后增增加加自自己己的的扩扩展展。为为了了增增强强自自己己数数据据库库操操作作的的性性能能与与效效率率等等,不不同同数数据库还会提供操作自己数据库的专门接口模块。据库还会提供操作自己数据库

14、的专门接口模块。 sqlite3sqlite3:sqlite3sqlite3模模块块提提供供了了SQLiteSQLite数数据据库库访访问问的的接接口口。SQLiteSQLite数数据据库库是是以以一一个个文文件件或或内内存存的的形形式存在的自包含的关系型数据库。式存在的自包含的关系型数据库。11.2 Python数据库编程概述数据库编程概述 DBM-styleDBM-style数数据据库库模模块块:pythonpython提提供供了了多多个个modulesmodules来来支支持持UNIX UNIX DBM-styleDBM-style数数据据库库文文件件。dbmdbm模模块块用用来来读读取

15、取标标准准的的UNIX-dbmUNIX-dbm数数据据库库文文件件;gdbmgdbm用用来来 读读 取取 GNU GNU dbmdbm数数 据据 库库 文文 件件 ;dbhashdbhash用用 来来 读读 取取Berkeley Berkeley DBDB数数据据库库文文件件。所所有有的的这这些些模模块块提提供供了了一一个个对对象象实实现现了了基基于于字字符符串串的的持持久久化化的的字字典典,它它与与字字典典dictdict非非常常相相似似,但但是是它它的的keyskeys和和valuesvalues都都必须是字符串。必须是字符串。11.2 Python数据库编程概述数据库编程概述 这这里里主

16、主要要介介绍绍PythonPython标标准准数数据据库库接接口口(Python (Python DB-API)DB-API)。Python Python DB-APIDB-API为为开开发发人人员员提提供供了了数数据据库库应应用用编编程程接接口口。DB-APIDB-API是是一一个个规规范范, ,它它定定义义了了一一系系列列必必须须的的对对象象和和数数据据库库存存取取方方式式, ,以以便便为为各各种种各各样样的的底底层层数数据据库库系系统统和和多多种种多多样样的的数数据据库库接接口口程程序提供一致的访问接口。序提供一致的访问接口。11.2 Python数据库编程概述数据库编程概述 Pytho

17、n Python 数数据据库库接接口口支支持持非非常常多多的的数数据据库库,可可以以选选择择适适合合你你项项目目的的数数据据库库:GadFlyGadFly、mSQLmSQL、MySQLMySQL、 PostgreSQLPostgreSQL、 Microsoft Microsoft SQL SQL ServerServer、InformixInformix、InterbaseInterbase、OracleOracle、SybaseSybase等等。可可以以访访问问PythonPython数数据据库库接接口口及及APIAPI查查看看详详细细的的支支持持数数据据库列表。库列表。11.2 Pytho

18、n数据库编程概述数据库编程概述 不不同同的的数数据据库库需需要要下下载载不不同同的的DB-APIDB-API模模块块,例例如如需需要要访访问问OracleOracle数数据据库库和和MysqlMysql数数据据,你你需需要要下下载载OracleOracle和和MySQLMySQL数数据据库库DB-APIDB-API模模块块。PythonPython的的DB-APIDB-API,为为大大多多数数的的数数据据库库实实现现了了接接口口,使使用用它它连连接接各各数数据据库库后后,就就可可以以用用相相同同的的方方式式操操作作各各种种数据库。数据库。 Python Python DB-APIDB-API使

19、使用用流流程程:1 1)引引入入DB-API DB-API 模模块块;2 2)获获取取与与数数据据库库的的连连接接;3 3)执执行行SQLSQL语语句句和和存储过程;存储过程;4 4)关闭数据库连接。)关闭数据库连接。11.3 Python与与ODBC pyodbcpyodbc封封装装了了ODBC ODBC APIAPI,通通过过它它可可以以访访问问各各种种有有ODBCODBC驱动的数据库。驱动的数据库。PyodbcPyodbc提供的相关对象方法说明如下:提供的相关对象方法说明如下:1 1、connection connection 对象方法对象方法 1 1)close()close():关闭

20、数据库;:关闭数据库; 2 2)commit()commit():提交当前事务;:提交当前事务; 3 3)rollback()rollback():取消当前事务;:取消当前事务; 4 4)cursor()cursor():获取当前连接的游标;:获取当前连接的游标; 5 5)errorhandler()errorhandler():作为已给游标的句柄。:作为已给游标的句柄。 2.cursor 2.cursor游标对象和方法游标对象和方法(具体略)(具体略)11.3 Python与与ODBC 【例【例11-111-1】 查询某个查询某个ODBCODBC数据源的某个表数据源的某个表#encoding

21、=gbk#encoding=gbkimport pyodbc, sysimport pyodbc, sys#conn= #conn= pyodbc.connect(DSN=mysqldsn;UID=root;PWD=root) pyodbc.connect(DSN=mysqldsn;UID=root;PWD=root) # # 连接连接MySQLMySQL#conn= pyodbc.connect(DRIVER=MySQL ODBC 5.3 #conn= pyodbc.connect(DRIVER=MySQL ODBC 5.3 ANSANSI Driver;SERVER=localhost;P

22、ORT=3306;DATABASE=Jxgl;USER=root;Driver;SERVER=localhost;PORT=3306;DATABASE=Jxgl;USER=root;PASSWORD=root)PASSWORD=root)#conn= pyodbc.connect(DRIVER=MySQL ODBC 5.3 #conn= pyodbc.connect(DRIVER=MySQL ODBC 5.3 Unicode Unicode Driver;SERVER=localhost;PORT=3306;DATABASE=Jxgl;USER=root;Driver;SERVER=local

23、host;PORT=3306;DATABASE=Jxgl;USER=root;PASSWORD=root)PASSWORD=root)conn = pyodbc.connect(DRIVER=SQL conn = pyodbc.connect(DRIVER=SQL Server;DATABASE=%s;SERVER=%s;UID=%s;PWD=%s%(Jxgl, Server;DATABASE=%s;SERVER=%s;UID=%s;PWD=%s%(Jxgl, 127.0.0.1, sa, sasasasa) # 127.0.0.1, sa, sasasasa) # 连接连接SQL Serve

24、rSQL Servercursor=conn.cursor()cursor=conn.cursor()cursor.execute(SELECT * FROM student)cursor.execute(SELECT * FROM student)while True:while True: row=cursor.fetchone() row=cursor.fetchone() if not row: break if not row: break print(row)print(row)cursor.close()cursor.close()conn.closeconn.close()11

25、.4 Python与与SQLite3 sqlite3sqlite3是一个很优秀的轻量级数据库。是一个很优秀的轻量级数据库。sqlite3sqlite3从从Python 2.5Python 2.5版本开始加入到标准库中。版本开始加入到标准库中。通过它,可以很方便地操作通过它,可以很方便地操作SQLiteSQLite数据库。操作数据库。操作SQLiteSQLite数据库的方法或语句与上面操作数据库的方法或语句与上面操作ODBCODBC数据数据源数据的基本相同。下面直接举例说明:源数据的基本相同。下面直接举例说明: 【例【例11-2】 创创建一个内存数据建一个内存数据库库,建表并插入,建表并插入记录

26、记录后,再后,再显显示出来示出来import sqlite3import sqlite3conn=sqlite3.connect(:memory:)conn=sqlite3.connect(:memory:)cursor=conn.cursor()cursor=conn.cursor()cursor.execute(CREATE TABLE person (name text, age cursor.execute(CREATE TABLE person (name text, age int)int)cursor.execute(INSERT INTO person VALUES curso

27、r.execute(INSERT INTO person VALUES (TOM,20)(TOM,20)cursor.execute(INSERT INTO person VALUES cursor.execute(INSERT INTO person VALUES (Jhon,22)(Jhon,22)mit()mit()cursor.execute(SELECT * FROM person)cursor.execute(SELECT * FROM person)while True:while True: row=cursor.fetchone()row=cursor.fetchone()

28、if not row: breakif not row: break print(row)print(row)cursor.close(); conn.close()cursor.close(); conn.close()11.5 Python与与MySQL PythonPython和和 MySQLMySQL交交 互互 的的 模模 块块 有有 MySQLdbMySQLdb和和PyMySQL(pymysql)PyMySQL(pymysql)等等。PythonPython操操作作MySQLMySQL数数据据库库的的方方法法首首先先可可选选MySQL MySQL for for PythonPyth

29、on,即即MySQLdbMySQLdb,原原因因是是这这个个是是C C写写的的,速速度度快快。MySQLdbMySQLdb是是用用于于PythonPython连连 接接 MysqlMysql数数 据据 库库 的的 接接 口口 , 它它 实实 现现 了了 Python Python 数数据据库库 API API 规规范范V2.0V2.0,是是基基于于 MySQL MySQL C C APIAPI上上建建立立的的。但但Python3Python3不不再再支支持持MySQLdbMySQLdb。若若想想在在LinuxLinux和和WindowsWindows中中都都同同时时能能够够运运行行,恐恐怕怕更

30、更得得考虑采用考虑采用PyMySQLPyMySQL。11.5 Python与与MySQL PyMySQLPyMySQL是是一一个个全全PythonPython写写的的PythonPython操操作作MySQLMySQL数数据据库库的的第第三三方方库库。使使用用时时可可以以把把它它放放入入代代码码工工程程中中调调用用,当当然然也也可可以以在在系系统统里里先先安安装装后后使使用用。PyMySQLPyMySQL的的性性能能和和MySQLdbMySQLdb几几乎乎相相当当,如如果果对对性性能能要要求求不不是是特特别别的的强强,使使用用PyMySQLPyMySQL将更加方便。将更加方便。 PyMySQL

31、PyMySQL的的使使用用方方法法和和MySQLdbMySQLdb几几乎乎一一样样,如如果果你你以以前前使使用用过过MySQLdbMySQLdb,只只需需要要将将import import MySQLdbMySQLdb修修改改为为 import import pymysqlpymysql就可以了。就可以了。11.5.2 使用使用MySQLdb操操MySQL 1 1、数据库连接、数据库连接 连连接接数数据据库库前前,请请先先确确认认以以下下事事项项:1 1)已已经经创创建建了了数数据据库库,如如:CompanyCompany。2 2)在在CompanyCompany数数据据库库中中已已经经创创建

32、建了了表表 EMPLOYEEEMPLOYEE。EMPLOYEEEMPLOYEE表表字字段段有有:FIRST_NAME,LAST_NAME,AGE,SEXFIRST_NAME,LAST_NAME,AGE,SEX和和INCOMEINCOME。3 3)连连接接数数据据库库CompanyCompany使使用用的的用用户户名名为为testusertestuser,密密码码为为test123test123,也也可可自自己己设设定定或或者者直直接接使使用用rootroot用用户户名名及及其其密密码码,MysqlMysql数数据据库库用用户户授授权权请请使使用用GrantGrant命命令令。4 4)在在机机器

33、器上上已已经经安安装装了了Python Python MySQLdb MySQLdb 模块。模块。11.5.2 使用使用MySQLdb操操MySQL 2 2、创建数据库表、创建数据库表 如果数据库连接存在,可以使用如果数据库连接存在,可以使用execute()execute()方法来为方法来为数据库创建表。数据库创建表。 【例【例11-411-4】 创建表创建表EMPLOYEEEMPLOYEE。import MySQLdb import MySQLdb db = db = MySQLdb.connect(localhost,root,root,CompanyMySQLdb.connect(lo

34、calhost,root,root,Company) )cursor = db.cursor() # cursor = db.cursor() # 使用使用cursor()cursor()方法获取方法获取操作游标操作游标# # 如果数据表已经存在使用如果数据表已经存在使用 execute() execute()方法删除表。方法删除表。cursor.execute(DROP TABLE IF EXISTS cursor.execute(DROP TABLE IF EXISTS EMPLOYEE)EMPLOYEE)11.5.2 使用使用MySQLdb操操MySQL# # 创建数据表创建数据表SQL

35、SQL语句语句sql = CREATE TABLE EMPLOYEE ( FIRST_NAME sql = CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME INT, SEX CHAR(1), INCOME FLOAT )LOAT )cursor.execute(sql)cursor.execute(sql)db.close() # db.close()

36、# 关闭数据库连接关闭数据库连接11.5.2 使用使用MySQLdb操操MySQL 3 3、数据库插入操作、数据库插入操作 以下例题使用执行以下例题使用执行 SQL INSERT SQL INSERT 语句向表语句向表 EMPLOYEE EMPLOYEE 插入记录:插入记录:【例【例11-511-5】 在在EMPLOYEEEMPLOYEE表中添加记录。表中添加记录。import MySQLdbimport MySQLdbdb = db = MySQLdb.connect(localhost,root,root,CompaMySQLdb.connect(localhost,root,root,C

37、ompany)ny)cursor = db.cursor()cursor = db.cursor()sql = INSERT INTO sql = INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)11.5.2 使用使用MySQLdb操操MySQL VALUES (Mac, Mohan, 20, M, 2000) # SQL VALUES (Mac, Mohan, 20, M, 2000) # SQL 插入语句插入语句 try:

38、try: cursor.execute(sql) # cursor.execute(sql) # 执行执行sqlsql语句语句 mit() # mit() # 提交到数据库执行提交到数据库执行 except: except: db.rollback() db.rollback() # # 执行中遇到错误回滚前面已做的执行中遇到错误回滚前面已做的操作操作 db.close() db.close()11.5.2 使用使用MySQLdb操操MySQL 以上例子中的以上例子中的SQLSQL语句也可以写成如下形式:语句也可以写成如下形式:sql = INSERT INTO sql = INSERT IN

39、TO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME) EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME) VALUES (%s, %s, %d, %c, %d ) % VALUES (%s, %s, %d, %c, %d ) % (Mac, Mohan, 20, M, 2000) # SQL (Mac, Mohan, 20, M, 2000) # SQL 插入语句插入语句 以下代码使用变量向以下代码使用变量向SQLSQL语句中传递参数:语句中传递参数:user_id = root; password = roo

40、tuser_id = root; password = rootcon.execute(insert into Login con.execute(insert into Login values(%s,%s) % (user_id,password)values(%s,%s) % (user_id,password)11.5.2 使用使用MySQLdb操操MySQL 4 4、数据库查询操作、数据库查询操作 PythonPython查查询询MysqlMysql使使用用 fetchone()fetchone()方方法法获获取取单单条条数数据据,使使用用fetchall()fetchall()方方

41、法法获获取取多多条条数数据据。说说明明:1 1)fetchonefetchone()(): 该该 方方 法法 获获 取取 下下 一一 个个 查查 询询 结结 果果 集集 。 结结 果果 集集 是是 一一 个个 对对 象象 。 2 2) fetchallfetchall()():接接收收全全部部的的返返回回结结果果行行。3 3)rowcountrowcount:这这是是一一个个只只读属性,并返回执行读属性,并返回执行execute()execute()方法后影响的行数。方法后影响的行数。11.5.2 使用使用MySQLdb操操MySQL 【例【例11-611-6】 查询查询EMPLOYEEEMP

42、LOYEE表中表中salarysalary(工资)字段大于(工资)字段大于10001000的所有数据。的所有数据。import MySQLdbimport MySQLdb # # 打开连接打开连接db = db = MySQLdb.connect(localhost,root,root,CompanyMySQLdb.connect(localhost,root,root,Company) ) cursor = db.cursor() # cursor = db.cursor() # 使用使用cursor()cursor()方法获取操方法获取操作游标作游标sql = SELECT * FROM

43、EMPLOYEE WHERE INCOME sql = SELECT * FROM EMPLOYEE WHERE INCOME %d % (1000)%d % (1000)11.5.2 使用使用MySQLdb操操MySQL try:try: cursor.execute(sql)cursor.execute(sql) results = cursor.fetchall() # results = cursor.fetchall() # 获取所有记录列表获取所有记录列表 for row in results:for row in results: fname = row0;lname = row

44、1;fname = row0;lname = row1; age = row2; sex = row3; income = row4age = row2; sex = row3; income = row4 print(fname=%s,lname=%s,age=%d,sex=%s,income=%d print(fname=%s,lname=%s,age=%d,sex=%s,income=%d % % (fname, lname, age, sex, income ) # (fname, lname, age, sex, income ) # 打印结打印结果果 except: print(

45、except: print(错误错误: : 不能获取到数据。不能获取到数据。) db.close() # db.close() # 结果如下结果如下: fname=Mac,lname=Mohan,age=20,sex=M,income=2000fname=Mac,lname=Mohan,age=20,sex=M,income=200011.5.2 使用使用MySQLdb操操MySQL 5 5、数据库更新操作、数据库更新操作 更新操作用于更新数据表的的数据,例如:更新操作用于更新数据表的的数据,例如: 【例【例11-711-7】 将将 EMPLOYEE EMPLOYEE表中所有记录的表中所有记录

46、的SEX SEX 字段改为字段改为MM,AGE AGE 字段递增字段递增1 1。 import MySQLdbimport MySQLdbdb=MySQLdb.connect(localhost,root,db=MySQLdb.connect(localhost,root,root,Company )root,Company )cursor = db.cursor()cursor = db.cursor()11.5.2 使用使用MySQLdb操操MySQLsql = UPDATE EMPLOYEE SET AGE=AGE + 1 WHERE sql = UPDATE EMPLOYEE SET

47、AGE=AGE + 1 WHERE SEX=%c % (M)SEX=%c % (M)try:try: cursor.execute(sql); mit()cursor.execute(sql); mit()except: db.rollback() # except: db.rollback() # 发生错误时回滚发生错误时回滚db.close()db.close()11.5.2 使用使用MySQLdb操操MySQL 6 6、执行事务、执行事务 事务机制可以确保数据一致性。事务应该事务机制可以确保数据一致性。事务应该具有具有4 4个属性:个属性: 原子性、一致性、隔离性、持久原子性、一致性、隔

48、离性、持久性。这四个属性通常称为性。这四个属性通常称为ACIDACID特性。特性。【例【例11-811-8】 基于事务机制实现记录删除的程序段。基于事务机制实现记录删除的程序段。sql = DELETE FROM EMPLOYEE WHERE AGE sql = DELETE FROM EMPLOYEE WHERE AGE %d % (20) # SQL%d % (20) # SQL删除语句删除语句try:try: cursor.execute(sql) # cursor.execute(sql) # 执行执行SQLSQL语句语句 mit() # mit() # 向数据库提交向数据库提交exc

49、ept:except: db.rollback() # db.rollback() # 发生错误时回滚发生错误时回滚11.5.3 PyMySQL的安装的安装 PyMySQL(pymysql)PyMySQL(pymysql)是是一一个个纯纯PythonPython写写的的MySQLMySQL客客户户端端,它它的的目目标标是是最最终终替替代代MySQLdbMySQLdb,可可以以在在CPythonCPython、PyPyPyPy、IronPythonIronPython和和JythonJython环环境境下下运运行行,PyMySQLPyMySQL在在MITMIT许许可可下下发发布布。在在开开发发基

50、基于于PythonPython语语言言的的项项目目中中,为为了了以以后后系系统能兼容统能兼容Python3Python3,建议使用,建议使用PyMySQLPyMySQL替换替换MySQLdbMySQLdb。 通过如下例子来说明使用通过如下例子来说明使用PyMySQLPyMySQL操作操作mysqlmysql。 【例例11-911-9】 对对studentstudent表插入一条记录。表插入一条记录。11.5.5 MySQL-connector安装使用安装使用PythonPython与与MySQLMySQL服服务务器器通通信信,还还可可以以使使用用MySQL-MySQL-connector-py

51、thonconnector-python,一一个个PythonPython模模块块MySQL/ConnectorMySQL/Connector。试试着着使使用用pippip安安装装,若若不不行行可可到到https:/ unzip mysql-connector-mysql-connector-python-2.1.3.zippython-2.1.3.zip后后 , 解解 压压 到到 mysql-connector-mysql-connector-python-2.1.3python-2.1.3目目录录,进进入入该该目目录录后后,利利用用“sudo “sudo python setup.py i

52、nstall”python setup.py install”来安装。来安装。11.5.5 MySQL-connector安装使用安装使用 安安装装成成功功后后,就就可可以以在在pythonpython程程序序里里正正常常使使用用“import “import mysql.connector mysql.connector as as mysql”mysql”导导入入MySQLMySQL的的connectorconnector模块了,使用也很简单。模块了,使用也很简单。 【例例11-1011-10】 一一个个简简单单查查询询一一个个数数据据表表数数据据的实例。的实例。11.5.6 中文乱码问题

53、处理中文乱码问题处理 通过通过PythonPython查询数据库中数据时,数据会呈现查询数据库中数据时,数据会呈现乱码,只需要在连接字符串中指定数据编码,如乱码,只需要在连接字符串中指定数据编码,如“utf8”“utf8”、“GBK”“GBK”等就可以。注意:等就可以。注意:Python 3.xPython 3.x才才支持支持UnicodeUnicode编码。编码。# -*- coding:gbk -*-# -*- coding:gbk -*-import pymysqlimport pymysqldb=pymysql.connect(host=localhost,usedb=pymysql.

54、connect(host=localhost,user=root,password=root,database=Jxgl,charr=root,password=root,database=Jxgl,charset=gbk)set=gbk)cursor=db.cursor(); sqlstr=SELECT * FROM cursor=db.cursor(); sqlstr=SELECT * FROM course;course;try:try: cursor.execute(sqlstr); cursor.execute(sqlstr); courses=cursor.fetchall()co

55、urses=cursor.fetchall()except: print(uexcept: print(u数据读取错误数据读取错误)else: print(courses)else: print(courses)db.close()db.close()11.6 Python与与SQL Server pythonpython连接微软的连接微软的SQL ServerSQL Server数据库用的第数据库用的第三方模块叫做三方模块叫做pymssqlpymssql(官方文档:(官方文档:http:/www.pymssql.org/en/stable/index.htmlhttp:/www.pymssq

56、l.org/en/stable/index.html)。)。 在官方文档可以看到,在官方文档可以看到,pymssqlpymssql是基于是基于_mssql_mssql模块做的封装,是为了遵守模块做的封装,是为了遵守pythonpython的的DB-DB-APIAPI规范接口。规范接口。11.6 Python与与SQL Server pymssqlpymssql的的安安装装可可以以通通过过:pip pip install install pymssql pymssql 或或 pip3 install pymssql pip3 install pymssql 另另 外外 , pymssql pym

57、ssql 2.1.32.1.3可可 由由 网网 址址 :https:/pypi.python.org/pypi/pymssql/2.1.3https:/pypi.python.org/pypi/pymssql/2.1.3获获取取。从从该该网网址址获获得得安安装装包包,解解压压释释放放后后,尝尝试试通通过过命命令令:python python setup.py setup.py installinstall来来安安装装;也也可可以以对对下下载载的的相相应应“文文件件名名.whl”.whl”安安装装文文件件,使使用用:“pip “pip install install 文文件件名名.whl”.wh

58、l”来来安安装装。安安装装与使用请参照官方文档。与使用请参照官方文档。11.6 Python与与SQL Server 下面直接通过下面直接通过PythonPython操作操作SQL ServerSQL Server数据数据库数据来说明:库数据来说明: (1 1)基本使用方法)基本使用方法 使用使用pymssqlpymssql连接连接sql serversql server数据库并实现数数据库并实现数据库基本操作据库基本操作( (详见书本,详见书本,APIAPI请参照官网:请参照官网: http:/www.pymssql.org/en/stable/ref/pymssqhttp:/www.pym

59、ssql.org/en/stable/ref/pymssql.html )l.html )11.6 Python与与SQL Server (2 2)可以使用另一种语法:)可以使用另一种语法:with with 来避免手动来避免手动关闭关闭cursorscursors和和connectionconnection连接连接import pymssqlimport pymssqlserver = 187.32.43.13 # server = 187.32.43.13 # 连接服务器地址连接服务器地址user = root # user = root # 连接帐号连接帐号password = 1234

60、 # password = 1234 # 连接密码连接密码with pymssql.connect(server, user, password, with pymssql.connect(server, user, password, 默认数据库名称默认数据库名称) as conn:) as conn: with conn.cursor(as_dict=True) as cursor: with conn.cursor(as_dict=True) as cursor: # # 数据存放到字典中数据存放到字典中 cursor.execute(SELECT * FROM persons WHER

61、E cursor.execute(SELECT * FROM persons WHERE salesrep=%s, John Doe)salesrep=%s, John Doe) for row in cursor:print(ID=%d, for row in cursor:print(ID=%d, Name=%s%(rowid,rowname)Name=%s%(rowid,rowname)11.6 Python与与SQL Server(3 3)调用存储过程:)调用存储过程:with pymssql.connect(server, user, password, tempdb) as wit

62、h pymssql.connect(server, user, password, tempdb) as conn:conn: with conn.cursor(as_dict=True) as cursor: with conn.cursor(as_dict=True) as cursor: cursor.execute( CREATE PROCEDURE FindPerson cursor.execute( CREATE PROCEDURE FindPerson name VARCHAR(100)name VARCHAR(100) AS BEGIN SELECT * FROM persons WHERE name AS BEGIN SELECT * FROM persons WHERE name = name END )= name END ) cursor.callproc(FindPerson, (Jane Doe,)cursor.callproc(FindPerson, (Jane Doe,) for row in for row in cursor:printcursor:print(ID=%d,Name=%s%(rowid,rowname)ID=%d,Name=%s%(rowid,rowname)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号