Python的数据库ORM框架:SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchmey采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixirdeclarative等可选插件可以让用户使用声明语法。

下面是一个完整ORM的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from sqlalchemy.orm  import mapper, sessionmaker  #sessionmaker() 函数是最常使用的创建最顶层可用于整个应用 Session 的方法,Session 管理着所有与数据库之间的会话
from datetime  import datetime
from sqlalchemy  import Table, MetaData, Column, ForeignKey, Integer, String,  Unicode , DateTime  #会SQL的人能理解这些函数吧?
engine  = create_engine( "sqlite:///tutorial.db" , echo = True #创建到数据库的连接,echo=True 表示用logging输出调试结果
metadata  = MetaData()  #跟踪表属性
user_table  = Table(  #创建一个表所需的信息:字段,表名等
'tf_user' , metadata,
Column( 'id' , Integer, primary_key = True ),
Column( 'user_name' Unicode ( 16 ), unique = True , nullable = False ),
Column( 'email_address' Unicode ( 255 ), unique = True , nullable = False ),
Column( 'password' Unicode ( 40 ), nullable = False ),
Column( 'first_name' Unicode ( 255 ), default = ''),
Column( 'last_name' Unicode ( 255 ), default = ''),
Column( 'created' , DateTime, default = datetime.now))
metadata.create_all(engine)   #在数据库中生成表
class User( object ):  pass #创建一个映射类
mapper(User, user_table)  #把表映射到类
Session  = sessionmaker()  #创建了一个自定义了的 Session类
Session.configure(bind = engine)   #将创建的数据库连接关联到这个session
session  = Session()
= User()
u.user_name = 'dongwm'
u.email_address = 'dongwm@dongwm.com'
u.password = 'testpass'  #给映射类添加以下必要的属性,因为上面创建表指定这几个字段不能为空
session.add(u)   #在session中添加内容
 
 
 
session.flush()  #保存数据 session.commit() #数据库事务的提交,sisson自动过期而不需要关闭
 
 
query  = session.query(User)  #query() 简单的理解就是select() 的支持 ORM 的替代方法,可以接受任意组合的 class/column 表达式 print list(query) #列出所有user print query.get(1) #根据主键显示 print query.filter_by(user_name='dongwm').first() #类似于SQL的where,打印其中的第一个 u = query.filter_by(user_name='dongwm').first() u.password = 'newpass' #修改其密码字段 session.commit() #提交事务 print query.get(1).password #打印会出现新密码
 
 
for instance  in session.query(User).order_by(User. id ):  #根据id字段排序,打印其中的用户名和邮箱地址 print instance.user_name, instance.email_address

项目主页:http://www.open-open.com/lib/view/home/1357482850074

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值