SQLAlchemy 简介

全功能数据访问框架 SQLAlchemy
ORM

项目开发常见的体系结构:
  UI
  Middle Layer
     BR
     Database Access Layer
        ORM
        DAO
        Database Access D...
ORM与数据访问工具

ORM 通常位于业务逻辑与数据驱动之间
简化数据库访问编码量
提高项目移植性
提高项目质量
Python 领域中的 ORM

基于动态语言的便利性,Python 领域出现了多个ORM框架。
  SQLAlchemy
  SQLObject
  Storm
  Django ORM
  Web2py DAL
  webpy ORM
  ...
ORM 评估与选型

 能简化编码量
 与应用层逻辑良好结合
 对数据库友好
   将关系数据模型友好的映射为对象结构
   支持业务所需的数据类型
   支持定制的局部查询
   支持原始SQL
 可移植
 可扩展nt
SQLAlchemy 评价

 能有效简化复杂查询
 对应用层友好
   允许数据模型与业务逻辑对象分离
   支持局部映射和多映射
 对数据库友好
   允许对象化的定制查询
   允许执行可参数化的原生SQL语句
   支持大量的数据类型
...
SQLAlchemy 体系
SQLAlchemy 体系—— Engine

 Engine 提供数据驱动接口
   连接池
   URI format link (postgres://user:***@server/database)
   允许直接执行SQL(ddl/...
SQLAlchemy 体系—— Session

 Session 是 DML 操作的核心组件
    支持对象化的 SQL Expression
    支持 Query 对象的迭代式生成和惰性执行
    支持 Select 表达式执行
 ...
SQLAlchemy 体系—— MetaData

 MetaData 是 DDL 操作的核心组件
   支持数据结构定义生成为数据库结构
   支持数据库结构反射
   为查询和数据库定义组件提供依据
   允许
SQLAlchemy 体系—— TABLE

 Table 类型定义数据库映射结构
    支持数据结构定义生成为数据库结构
    支持数据库结构反射
    为查询组件提供表结构
    支持独立的约束定义(或定义于每个 Column 对象...
SQLAlchemy 体系—— Mapper

 Mapper 为业务类型和数据库定义提供中间连接
   允许在Mapper中详细定义数据关系和字段
   允许定义各种组合类型字段
   支持常见关系模式
      http://www.sq...
SQLAlchemy 应用——访问数据库

 最简单的使用可以直接调用 engine
   from sqlalchemy import create_engine
   engine = create_engine(uri)
   res =...
SQLAlchemy 应用——访问数据库

 定义表
    from sqlalchemy.orm import Table, Column, String,...
    table = Table(name, metadata, ...)...
SQLAlchemy应用——业务对象分离

 定义业务对象
   class BR(object):pass
   可以在此编写数据无关的测试代码
 定义数据模型
   table = Table(...)
 定义映射
   mapper
  ...
SQLAlchemy Tips

 可以简化模型定义
    Declaratively
 可以反射数据库结构
    metadata.reflect(bind=engine)
 SqlSoup
 table.tometadata
    A...
SQLAlchemy 实践

 Umass 统计项目
    快速查询
    复杂查询的映射和比对
    业务逻辑分离
 KUSE 搜索引擎项目
    快速构造查询
    灵活的即用查询集
    特化数据类型的运用
    特化运算符...
Upcoming SlideShare
Loading in …5
×

Sql Alchemy Story

2,291 views

Published on

091119 珠海金山软件.研发改进中心
COFFEE时间分享幻灯
讲师 刘鑫

Published in: Technology
1 Comment
7 Likes
Statistics
Notes
  • 啊。。。这是刘鑫的那个课件~~~~~~~~
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
2,291
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
23
Comments
1
Likes
7
Embeds 0
No embeds

No notes for slide

Sql Alchemy Story

  1. 1. SQLAlchemy 简介 全功能数据访问框架 SQLAlchemy
  2. 2. ORM 项目开发常见的体系结构: UI Middle Layer BR Database Access Layer ORM DAO Database Access Driver DATABASE
  3. 3. ORM与数据访问工具 ORM 通常位于业务逻辑与数据驱动之间 简化数据库访问编码量 提高项目移植性 提高项目质量
  4. 4. Python 领域中的 ORM 基于动态语言的便利性,Python 领域出现了多个ORM框架。 SQLAlchemy SQLObject Storm Django ORM Web2py DAL webpy ORM ...
  5. 5. ORM 评估与选型 能简化编码量 与应用层逻辑良好结合 对数据库友好 将关系数据模型友好的映射为对象结构 支持业务所需的数据类型 支持定制的局部查询 支持原始SQL 可移植 可扩展nt
  6. 6. SQLAlchemy 评价 能有效简化复杂查询 对应用层友好 允许数据模型与业务逻辑对象分离 支持局部映射和多映射 对数据库友好 允许对象化的定制查询 允许执行可参数化的原生SQL语句 支持大量的数据类型 允许扩展数据类型 可移植性良好 支持常用的多种数据库/源 提供丰富的通用方法 提供强大的扩展能力
  7. 7. SQLAlchemy 体系
  8. 8. SQLAlchemy 体系—— Engine Engine 提供数据驱动接口 连接池 URI format link (postgres://user:***@server/database) 允许直接执行SQL(ddl/dml) 允许参数化操作 bind to all others 可以直接建立 SQLite 数据库 对象化结果集
  9. 9. SQLAlchemy 体系—— Session Session 是 DML 操作的核心组件 支持对象化的 SQL Expression 支持 Query 对象的迭代式生成和惰性执行 支持 Select 表达式执行 支持原始SQL
  10. 10. SQLAlchemy 体系—— MetaData MetaData 是 DDL 操作的核心组件 支持数据结构定义生成为数据库结构 支持数据库结构反射 为查询和数据库定义组件提供依据 允许
  11. 11. SQLAlchemy 体系—— TABLE Table 类型定义数据库映射结构 支持数据结构定义生成为数据库结构 支持数据库结构反射 为查询组件提供表结构 支持独立的约束定义(或定义于每个 Column 对象) 不依赖ID列 允许定义各种复杂的关系
  12. 12. SQLAlchemy 体系—— Mapper Mapper 为业务类型和数据库定义提供中间连接 允许在Mapper中详细定义数据关系和字段 允许定义各种组合类型字段 支持常见关系模式 http://www.sqlalchemy.org/docs/05/ormtutorial.html 基于 relation 允许定制惰性级别
  13. 13. SQLAlchemy 应用——访问数据库 最简单的使用可以直接调用 engine from sqlalchemy import create_engine engine = create_engine(uri) res = engine.execute 可以增加 session 支持 from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() session.execute
  14. 14. SQLAlchemy 应用——访问数据库 定义表 from sqlalchemy.orm import Table, Column, String,... table = Table(name, metadata, ...) table = Table(name, metadata, ..., autoload=True) session 支持Query操作 session.query(table).filter_by(...).filter(...).scalar() session.query(table).filter_by(...).filter(...).count() session.query(table).filter_by(...).filter(...).all() ...
  15. 15. SQLAlchemy应用——业务对象分离 定义业务对象 class BR(object):pass 可以在此编写数据无关的测试代码 定义数据模型 table = Table(...) 定义映射 mapper properties include/exclude_properties relation
  16. 16. SQLAlchemy Tips 可以简化模型定义 Declaratively 可以反射数据库结构 metadata.reflect(bind=engine) SqlSoup table.tometadata Adapting Tables to Alternate Metadata
  17. 17. SQLAlchemy 实践 Umass 统计项目 快速查询 复杂查询的映射和比对 业务逻辑分离 KUSE 搜索引擎项目 快速构造查询 灵活的即用查询集 特化数据类型的运用 特化运算符的使用 Socrates 语义模型存储工具 展望 特化的动态数据类型支持 高可移植性

×