Zope访问关系数据库(1)
2006-02-23 17:15 作者:Unlinux
推荐:4143417 收藏:2681029 评论:1 来源:www.Unlinux.com
Zope
使用一个对象数据库存储Zope对象。Oracle,Sybase,PostgreSQL等关系数据库使用一种不同的方法存储数据。关系数据库的数据存储
在数据表中。表中的数据以“行”来存储。表的列组称为模式。标准查询语言SQL用来查找、修改关系数据库中的数据。
Zope不是用这种方
法来存储数据的。Zope的对象数据库接受彼此有种种关系的许多对象。关系数据存储于非常简单的表格之中,不易映射到对象上去。Zope提供了几种在
Zope对象世界中访问关系数据的途径,本文下面将详细介绍“数据库接口”(Database Adapter)和"SQL方法"。
Zope
关系数据库支持最普通的应用就是操作网络数据。例如:假定你的人力资源部门管理员工数据,这个数据库提供了一些工具供管理员生成报表、修改数据。然而,对
于员工查看、简单管理自己的数据却很困难。如果他的住址变更了,他没有办法更改数据库中自己的地址信息。使用Zope访问关系数据,你的员工无论在家还是
在办公室,都可以使用任何浏览器来查看、修改自己的记录。
使用Zope访问关系数据库,你可以利用Zope的所有特性,比如,安全性、动态表达、联网工作等等。使用Zope可以有机地将数据访问、数据表达、数据管理融合在一起。
为了在Zope中使用关系数据,必须建立两种不同的Zope对象:一是“数据库连接对象”,另一个是“Z SQL方法”。前者告诉Zope如何连接一个关系数据库;后者使用前者去连接一个数据库,并描述了对数据库的操作。本文将进一步讨论这两种对象。
1 使用数据库连接对象
数据库连接对象用来建立和管理对外部数据库的连接。在创建SQL方法之前必须建立好数据库连接对象,所有的Z SQL方法都必须和一个数据库连接对象关联,Zope提供了下面几个数据库接口(Database Adapter,简称AD):
Oracle
Oracle是一个广泛应用、性能优良的商业关系数据库。它的Zope商业接口由Digital Creations公司编写提供。Oracle可以从其网站试用、购买。
Sybase
这是一个流行的商业关系数据库。它的AD由Digital Creations公司编写提供。Sybase可以从其网站试用、购买。
ODBC
ODBC是一种由众多商业、开源数据库支持的跨平台的数据库工业标准协议。他的DA由DC公司编写提供。
PostgreSQL
这个数据库是开源数据库的领头羊。它有多个DA。像ZPoPy,由Zope社区成员Thierry Michel维护。从PostgreSQL的网站可以得到更多关于PostgreSQL的信息。
MySQL
MySQL是一个发展迅速的开源关系数据库。从其网站可以得到更多的信息。它的DA由Zope社区成员Monty Taylor维护。
Interbase
这是Inprise(Borland)公司的一个开源关系数据库。在该公司的网站上可以得到此数据库更多的信息。你可能对维护此数据库一个分支的社区FireBird感兴趣。Zope社区成员Bob Tierney在维护该数据库的Zope接口。
Gadfly
这个关系数据库是Aaron Waters用Python写的。它内置在Zope中,用来做演示或处理小批量的数据。它很快,但是不适用于处理大量数据,因为它把所有的数据都读入内存来处理。可以在Chordate的网站上获得更多的情况。
除了Gadfly,其它关系数据库都是Zope的外部扩展。就是说,你的数据库可以运行在Zope之外的其他机子上。当然,你的Zope要能访问运行数据库的主机。安装、配置关系数据库超出了本书的范围。上面提到的关系数据库都有自己的安装配置文档。
因为Gadfly在Zope内运行,你不必为它指定具体的连接信息。其它关系数据库则要你具体指定如何连接。这种规格成为“连接字符串”,不同数据库各不相同。
为了从Zope中访问关系数据库,你必须下载安装关系数据库的特定接口。这些接口可以从Zope.org的Products目录下载(Gadflyde的接口已经包含在了Zope中)。本章的示例都是使用Gadfly,但处理过程适用于其它关系数据库。
安装数据库接口之后就可以从添加列表中选择它来创建一个数据库连接对象了。各个数据库连接对象都是相似的。从添加列表选择Z Gadfly Database Connetion会转入Gadfly数据库连接对象的添加表单。
选
择Demo数据源,用Gadfly_database_connection作为id,单击添加按钮,生成一个Gadfly数据库连接对象。单击新建的数
据库连接对象,看到的是它的状态页。从本页可以知道你是否连接到了数据库(有一个按钮控制数据库的连接和断开)。一般情况下,Zope会自动连接到数据
源。某些情况下,你可能想到手工控制数据库的连接。对Gadfly来说,断开连接没有什麽意义,但是对于外部的数据的维护,就有必要手工控制它们的连接。
下一页是属性页,该页显示数据源和连接对象的其他一些属性。当你想把数据源换成另外一个时,就会用到这些属性。
在测试页可以测试你的数据库连接。在该页,你可以直接输入SQL语句操作你的数据库。该页用来测试数据库,同时运行SQL语句(比如创建一个表)。此处不宜输入过多的SQL语句。SQL语句要放在Z SQL方法中,本章后面将作讲解。
让我们在数据库中创建一个表以便展示本章的例子。测试页允许直接输入SQL语句操作数据库。你可以在测试页输入SQL创建数据表而不必使用Z SQL方法。创建名为employees的表使用如下SQL语句:
CREATE TABLE employees
(
emp_id integer,
first varchar,
last varchar,
salary float
)
单击提交按钮运行这条SQL语句。Zope会返回一个验证页告诉你什麽SQL在运行和可能的结果。
此处运行的SQL会因你的数据库不同而各异。数据库建表的确切语句,请参考数据库提供商的文档。
此
处的SQL语句将在Gadfly数据库中新建一个名为employees的表。该表有四列:emp_di,first,last,
salary。第一列是员工的id,这是标志员工的唯一号码。接着的两列类型是varchar,该类型和字符串类似。salary列的类型是float,
即浮点数。不同的数据库提供不同的数据类型,参考相关文档查看你的数据库支持的数据类型。
为了保证员工号是唯一的,需要为表创建一个索引。在测试页输入下面的SQL语句:
CREATE UNIQUE INDEX emp_id ON employees
(
emp_id
)
现在你有了一个表并且创建了一个索引,要验证你的表,转到浏览页。该页显示了数据库的表和它们的模式。在这里,你可以看到一个employees 表。假如点击了前边的“加号”,该表会展开,显示出四列:emp_id,first,last,salary。
当创建多表复杂SQL应用时,这是非常有用的——各表的结构一目了然。当然不是所有的数据库都支持表的浏览。
你已经建立了一个数据库连接对象并且新建了一个表,接下来就可以创建Z SQL方法来操作你的数据了。