RSS
热门关键字:
当前位置 : 主页>编程开发>Python>列表

使用 SQLObject 连接数据库与 Python

来源:我要研发网 作者:BusinessWeekly.Asia 时间:2008-05-18 点击:



  本文示例源代码或素材下载 字串3

  通过提供用于操作数据库表的类和对象,对象关系映射工具有助于提高生产率。Python 最好的对象关系映射工具是 SQLObject —— 一个开放源码项目,它几乎完成编程数据库所需的所有操作。本文介绍 SQLObject 及其功能。阅读本文后,您将能够不编写任何 SQL 代码而连接 Python 与数据库。

字串6

  当面向对象编程范例满足大多数数据库的关系范例时,通常会看到对象关系映射。对象关系映射是这两个世界的桥梁。它允许您定义与数据库表对应的类。然后您可以使用这些类及其实例上的方法来与数据库交互,而不用编写 SQL。使用对象关系映射并不意味着不需要知道关系数据库如何工作,而是不必要编写 SQL,从而避免编程错误。

字串6

  您可以找到一打以上的操作 SQL 数据库的开放源码 Python 包,这还没包括用于连接 Python 与特定数据库的特殊用途模块。SQLObject 是其中最好的模块。它是简单易用的完全对象关系映射包。SQLObject 几乎可以完成编程数据库所需的所有操作。 字串2

  本文展示了 SQLObject 如何与数据库交互,如何使用 SQLObject 编写数据库访问和数据验证代码,以及如何将它用于遗留或现有数据库。这里假设您已经具备 Python 和关系数据库的知识。

字串5

  安装和设置 SQLObject

字串4

  SQLObject 具有一个 setup.py 文件,安装方式与其他任何 Python 包一样。如果您使用的是 Python V2.2,则还需要安装 mxDateTime Python 包(SQLObject 使用 Python V2.3 的内置 datetime 模块,如果该模块可用的话)。

字串9

  要实际使用 SQLObject,需要设置数据库包以及这种数据库的 Python 接口。SQLObject 连接多种数据库,其中包括三个大的开放源码产品:MySQL、PostgreSQL 和无服务器 SQLite。 字串3

  最后,需要为应用程序创建数据库。对于 SQLite,这意味着创建一个存储该数据库的文件。对于其他数据库,这意味着连接数据库服务器,执行 CREATE DATABASE 命令,并授权数据库用户对新数据库的一些访问,以便 SQLObject 可以使用该用户帐户来连接。

字串9

  清单 1 展示了如何用 MySQL 创建新数据库。 字串2

  清单 1. 用 MySQL 创建新数据库的代码 字串3

mysql> use mysql;
Database changed
mysql> create database sqlobject_demo;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on sqlobject_demo to 'dbuser'@'localhost'
identified by 'dbpassword';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
字串2

  连接数据库 字串5

  需要编写的第一个 Python 代码是数据库连接代码。基于所使用的数据库,这是惟一需要编写不同代码的地方。 字串1

  例如,如果想让应用程序使用 SQLite 数据库,则需要将数据库文件的路径写入位于 sqlobject.sqlite 包的 SQLite 连接构建器中。如果数据库文件不存在,QLObject 将告诉 SQLite 创建一个,代码如下: 字串6

import sqlobject
from sqlobject.sqlite import builder
conn = builder()('sqlobject_demo.db')

字串1

  如果使用的是 MySQL 或带有服务器的其他数据库,则将数据库连接信息传递到连接构建器中。清单 2 提供了在上一节创建的 MySQL 数据库的示例。 字串5

  清单 2. 传递 MySQL 数据库连接信息的代码

字串4

import sqlobject
from sqlobject.mysql import builder
conn = builder()(user='dbuser', passwd='dbpassword',
         host='localhost', db='sqlobject_demo')
字串6

  不管连接哪种数据库,连接代码都应该放置在一个名称类似 Connection.py 的文件中,且该文件存储在一些通常可访问的位置中。这样,可以导入您定义的所有类,并使用已经构建的 conn 对象。conn 变量将包含所有与数据库相关的详细信息。

字串9

  但是要注意,SQLObject 的一些特性不可用于 SQLite 或 MySQL。不能将数据库选择与连接之后编写的代码完全分离。(参阅 Using SQLObject with pre-existing tables 获得更多信息。)

字串7

  定义模式 字串6

  SQLObject 使得操作数据库表变得容易。看第一个简单的例子,考虑一个电话簿应用程序的由单个表组成的数据库模式,如表 1 所示。

字串4

  表 1. phone_number 表的描述

字串4

字段 类型 说明
id Int 主键
number String “(###) ###-####”字符串格式;应该惟一
owner String 这是谁的号码?
last_call Date 用户最后一次呼叫该号码是什么时候?

字串7

  取决于您的 SQL 风格,该表的 SQL 类似如下:

字串7

CREATE TABLE phone_number (
 id INT PRIMARY KEY AUTO_INCREMENT,
 number VARCHAR(14) UNIQUE,
 owner VARCHAR(255), 
 last_call DATETIME,
 notes TEXT
)
字串1

  使用 SQLObject,不需要编写该 SQL 代码。通过定义 Python 类来定义该数据表。该代码将进入名为 PhoneNumber.py 的文件中,如清单 3 所示。

字串5

  清单 3. PhoneNumber.py

字串9

import sqlobject
from Connection import conn
class PhoneNumber(sqlobject.SQLObject):
  _connection = conn
  number = sqlobject.StringCol(length=14, unique=True)
  owner = sqlobject.StringCol(length=255)
  lastCall = sqlobject.DateTimeCol(default=None)
PhoneNumber.createTable(ifNotExists=True)

字串6

  在此使用了先前定义的 conn 变量。每个表类需要将对数据库连接的引用存储在它的 _connection 成员中。该信息隐式用于对该类的表的所有数据库访问中。因此,不必担心 SQL 或任何特殊数据库,因为代码可以按照抽象关系模式来表示。

字串8

  定义表的类还有一组定义表字段的成员。SQLObject 提供了 StringCol、BoolCol 等等 —— 一个类对应一种数据库字段类型。

字串4

  createTable() 方法第一次运行时,SQLObject 将创建一个名为 phone_number 的表。然后,它将只使用该表,因为您将 ifNotExists 设置为 True 来调用该方法。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章