Python 的数据库编程
来源:互联网 发布:excel会计记账软件 编辑:程序博客网 时间:2024/05/22 07:05
第十章 Python的数据库编程
10.1 Python环境下的数据库编程
1、通过ODBC访问数据库
ODBC是微软建立的一组规范,可以直接对数据库访问的应用程序接口。
方法:开始 控制面板 管理工具 数据源 添加相应的数据库程序,最后确定完成ODBC的配置。这样在Python程序中就可以直接调用adress数据库。ODBC连接数据主要是使用odbc()对象的数据集合进行操作。
import odbc, dbi # 导入ODBC模块和驱动程序import timedb = odbc.odbc('addresses/scott/tiger') # 打开数据库连接curser = db.cursor() # 产生cursor游标curser.execute("select * from address order by id desc")for col in curser.description: # 显示行描述 print col[0], col[1]result = curser.fetchall()for row in result: # 输出各字段的值 print row print row[1], row[2] timeTuple = time.localtime(row[3]) print time.strftime('%Y/%m/%d', timeTuple)
5、curser 游标,它可以查询、添加、删除和修改数据库。
6、execute () 查询表address的内容。
7、description 属性 。
8、输出字段名、字段类型
9、fetchall() 方法,返回结果集对象result
10、输出表adress每行的内容。
12、输出name 、adress 字段的值。
13、localtime() 方法:把字段createtime 转换成元组
14、suftime()方法:把元组格式化为字符串输出。
2、使用DAO对象访问数据库
DAO具有面向对象的接口,适用于小型应用程序或小范围本地使用。DAO模型是设计关系数据库系统结构的对象类的集合。Python的扩展模块win32com.client 实现了DAO的连接方式,即DAO不需要类似ODBC的配置操作,可以在Python程序中直接连接数据库。
<span style="font-size:18px;">#通过DAO方式连接ACCESS数据库addresses ,并演示DAO查询和插入等操作import win32com.clientengine = win32com.client.Dispatch("DAO.DBEngine.36") # 实例化数据库引擎db = engine.OpenDatabase("addresses.mdb") # 打开数据库连接rs = db.OpenRecordset("address") # 根据表名返回结果集对象rs = db.OpenRecordset("select * from address") # 通过SQL语句返回数据集对象# 插入数据db.Execute("""insert into address(name, address, createtime) values('赵涛', '上海虹口', '2008-3-25')""")while not rs.EOF: # 输出表address中的数据 print (rs.Fields("address").Value).encode('gb2312') rs.MoveNext()</span>
1、该模块调用WIN32的接口访问数据库
3、代码实例化数据库引擎,返回对象engine
5,6行代码作用相同
8、Execute()方法执行插入操作
12、代码遍历结果集对象rs,如果rs中记录指针移动表address尾部,则退出循环。
13、获取字address的值,由于address字段中包含中文,故要进行编码转换。
3、使用ActiveX Date Object 访问数据库
ADO的访问速度比DAO更快,而且支持多种数据库,例如Oracle、SQL Server 、Access、MySQL。同时,ADO可以应用于文本文件、Word、Excel 等文件类型的数据源。ADO连接方式需要设置连接字符串,连接字符串是由连接数据库的参数组成的。例,连接oracle 数据库可以表示 为:
provider = OraOLEDB.Oracle;PLSQLRSet = 1;Password = tiger ;UserID = scott
参数Provider 表示数据源名称 ,参数PLSQLRSet表示返回PLSQL的结果集,Password 为访问数据的密码,UserID为访问数据库的账户。
<span style="font-size:18px;">#!/usr/bin/python# -*- coding: UTF-8 -*-import win32com.clientconn = win32com.client.Dispatch('ADODB.Connection') # 实例化数据库连接对象dsn = 'Provider=OraOLEDB.Oracle;PLSQLRSet=1;Password=tiger;User ID=scott;Data Source=ORCL'conn.Open(dsn) # 打开oracle数据库rs = win32com.client.Dispatch('ADODB.Recordset')sql = """select a.ename 姓名,a.job 工作,a.sal 薪水,c.dname 部门,b.ename 管理者 from emp a,emp b,dept c where a.sal > 2500 and a.deptno = c.deptno and a.mgr = b.empno(+) order by a.sal"""rs.Open(sql, conn) # 返回查询的结果集li = list()rs.MoveFirst()while not rs.EOF: d = dict() for x in range(rs.Fields.Count): # 把每行数据存储在一个字典中 key = rs.Fields.Item(x).Name value = rs.Fields.Item(x).Value d.setdefault(key, value) # 建立字段名和字段值的对应关系 li.append(d) # 把每个字典存储在列表中 print rs.Fields("薪水").Value, rs.Fields("工作").Value, \ rs.Fields("部门").Value, rs.Fields("姓名").Value, \ rs.Fields("管理者").Value rs.MoveNext()for d in li: # 输出列表中的内容 for key in d.keys(): print key.encode("gb2312"), d.get(key), printconn.Close() # 关闭连接</span>
3、代码实例化数据库引擎,返回连接对象conn
4、oracle数据库的连接字符串
7、创建结果集对象rs
8、查询工资大于2500的员工信息
14、获取查询的结果集
15、把记录指针移动到结果集的第1行
19、遍历每行数据的字段,建立字段名和字段值的关系,并存储到1个字典中
23、把每行记录对应的字典存储到列表 中
24、输出结果集的内容 files()方法通过字段名获取字段对象。
28、遍历列表 中的每个字典,输出列表中的内容
4、python连接数据库的专用模块
<span style="font-size:18px;">#!/usr/bin/python# -*- coding: UTF-8 -*-import cx_Oracleconnection = cx_Oracle.connect("scott", "tiger", "ORCL") # 连接oracle数据库cursor = connection.cursor() # 获取cursor对象操作数据库cursor.arraysize = 15sql = """select a.ename 姓名,a.job 工作,a.sal 薪水,c.dname 部门,b.ename 管理者 from emp a,emp b,dept c where a.sal > 2500 and a.deptno = c.deptno and a.mgr = b.empno(+) order by a.sal"""cursor.execute(sql)for x in cursor.fetchall(): for value in x: print value, printcursor.close()connection.close()</span>
4、创建游标对象cursor,访对象执行sql语句
2.MySQLdb 模块
# -*- coding: UTF-8 -*-import os, sysimport MySQLdb# 连接数据库try: conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='ADDRESSBOOKDB') except Exception, e: print e sys.exit()cursor = conn.cursor()sql = "insert into address(name, address) values (%s, %s)" values = (("张三", "北京海淀区"), ("李四", "北京海淀区"), ("王五", "北京海淀区"))try: cursor.executemany(sql, values) # 插入多条数据except Exception, e: print esql = "select * from address"cursor.execute(sql) # 查询数据data = cursor.fetchall()if data: for x in data: print x[0], x[1]cursor.close() # 关闭游标conn.close() # 关闭数据库# 转义字符函数s = "escape''"print sprint MySQLdb.escape_string(s)</span>
5、调用connect()方法连接addressesdb数据库 主机地址localhost 。返回数据库连接对象conn
10.2 Python的持久化模块
1、用dbhash 模块读写数据
</pre><pre name="code" class="python"># windows 下 DBM数据库的读写操作 (DBM是一种文件式数据库,不具备管理能力,但比普通文件更稳定、可靠,查询速度快。)
import dbhashdb = dbhash.open('temp', 'c') # 创建并打开数据库 返回的db对象具有字典的所有属性和方法db['Tom'] = 'Beijing road' # 写数据 db对象的操作方式和字典相同db['Jerry'] = 'Shanghai road'for k, v in db.iteritems(): # 遍历db对象 print k, vif db.has_key('Tom'): ##判断是否存在关键字“TOM”,如果存在则删除对应的数据 del db['Tom']db['Tod'] = 2 # 非字符串的键或值会引发异常print dbdb.close() # 关闭数据库
2、 shelve 模块读写数据
## shelve 模块的使用方法
import shelveaddresses = shelve.open('addresses')addresses['1'] = ['Tom', 'Beijing road', '2008-01-03']addresses['2'] = ['Jerry', 'Shanghai road', '2008-03-30']addresses['3'] = 3#addresses['4'] = 0if addresses.has_key('2'): del addresses['2']print addressesaddresses.close()
3、嵌入式数据库SQLite
#!/usr/bin/python# -*- coding: UTF-8 -*-import sqlite3# 连接数据库conn = sqlite3.connect("D:/developer/python/example/10/addresses.db")# 创建表conn.execute("create table if not exists address(id integer primary key autoincrement, name varchar(128), address varchar(128))")# 插入数据conn.execute("insert into address(name, address) values ('Tom', 'Beijing road')")conn.execute("insert into address(name, address) values ('Jerry', 'Shanghai road')")# 手动提交数据conn.commit()# 获取游标对象cur = conn.cursor()# 使用游标查询数据cur.execute("select * from address")# 获取所有结果res = cur.fetchall()print "address: ", resfor line in res: for f in line: print f, print# 关闭连接cur.close()conn.close()
- Python 的数据库编程
- python数据库编程(1):潦草的开篇
- python数据库编程_sqlite
- python数据库编程_sqlite
- python mysql数据库编程
- python数据库编程
- python数据库编程
- 【实例】 python数据库编程
- python数据库编程
- Python数据库编程
- Python数据库编程
- Python网络编程05----django与数据库的交互
- Python网络编程06----django数据库的增删改查
- 用Python实现数据库编程
- 用Python实现数据库编程
- 用PYTHON进行数据库编程
- 用Python实现数据库编程
- 用Python实现数据库编程
- 机器学习中的参数值同时更新问题
- Oracle查看表空间使用率(包括临时表空间)
- mysql-connector-odbc 的结果集不能释放的问题
- android快速开发系列
- Android之如何解决Listview里面的值出现了2次
- Python 的数据库编程
- CocoaPods安装与使用
- dwz框架实现关闭navTab刷新指定navTab的一种方案
- Android读书笔记----滑动冲突的解决方式
- CocoaPods安装和使用教程
- Search
- markdown 学习笔记
- IOS 编程中引用第三方的方类库的方法及常见问题
- KSImageNamed 安装后无效解决方法(试过有效)