Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26278040
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-04-20 22:37:19

SQLObject模块笔记

下载URL值:0.12.3

Python 最好的对象关系映射工具是 SQLObject。类似于JAVA中的Hib框架。

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

清单1.连接MySQL数据库信息的代码

import sqlobject

from sqlobject.mysql import builder

conn = builder()(user='root',password='123',host='localhost',db='test')

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

笔记:在ASPPHP代码中也是一样的将连接对象创建放于这种公共代码中。

定义模式:

1、   创建表的SQL语句

CREATE TABLE `phone_number` (

  `id` int(11) NOT NULL auto_increment,

  `number` char(50) default NULL,

  `owner` char(50) default NULL,

  `last_call` date default NULL,

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用类的方法如下:

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) #创建表的方法

 

2、   处理旧的CRUD(即Insert update select delete

2.1 创建即Insert语句

from test import phoneNumber            #导入进来这个Model对象进来

myphone = phoneNumber(number='555-1222',owner='Lenoard')

2.2 select操作

from test import phoneNumber

print phoneNumber.select(phoneNumber.q.id==1)[0]

表示对phone_number表的id字段做查询。SQLObject可以做== != < > >= 操作的。

from test import phoneNumber

print phoneNumber.select(phoneNumber.q.id<2)[0]

 

from test import phoneNumber

print phoneNumber.select(phoneNumber.q.owner == '415').count()

 

AND OR查询

from test import phoneNumber

from sqlobject import AND,OR

print phoneNumber.select(OR(phoneNumber.q.owner == '415',phoneNumber.q.owner=='a')).count()

 

2.3 更新即做 UPDATE操作

 

现在这种ORM框架实在太多。了解一下即可不建议专用它。还是用Django自带的Model要好些

 

阅读(571) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~