1. 什么是ORM

    使用关系对象映射进行数据库操作。
    将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 分类
    -DB first 手动创建数据库和表,自动生成类
    -code first 手动创建类和数据库,自动生成表
    (SQLAlchemy属于code first) 类 -> 表
    对象 -> 行
  2. 安装SQLAlchemy
    pip install SQLAlchemy
  3. 创建表
    #首先导入需要的模块(包含了下面要用的)
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String,ForeignKey,UniqueConstraint,Index
    from sqlalchemy.orm import sessionmaker,relationships
    from sqlalchemy import create_engine #首先构造一个基类
    Base = declarative_base() #根据表对应类的关系,创建类
    class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(30),nullable=True)
    email = Column(String(30),nullable=True)
    user_type_id = Column(Integer,ForeignKey('usertype.id')) class UserType(Base):
    __tablename__ = 'usertype'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(20),nullable=False) #声明engine以连接操作数据库
    #参数的格式:数据库类型 模块类型 用户名 密码 IP 端口 数据库 编码
    engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/testorm?charset=utf8",max_overflow=5) #创建表
    Base.metadata.create_all(engine) #删除表
    Base.metadata.drop_all(engine)
  4. #要操作数据库首先要获得一个session
    #下面的操作最后都要:session.commit()。最后session.close()
    Session = sessionmaker(bind=engine)
    session = Session() #根据对象对应行,我们创建一个对象
    obj = UserType(title='普通用户')
    session.add(obj) #插入一个 #添加多行
    objs = [
    UserType(title='黑铁用户'),
    UserType(title='白金用户'),
    UserType(title='黄金用户'),
    ]
    session.add_all(objs)
  5. #以删除id>2的UserType数据为例
    session.query(UserType).filter(UserType.id>2).delete()
  6. #将id>0的行的title改为哈哈
    session.query(UserType.id,UserType.title).filter(UserType.id>0).update({'title':'哈哈'}) #在id>0的title后面添加一个x
    session.query(UserType.id,UserType.title).filter(UserType.id>0).update({UserType.title:UserType.title+"x"},synchronize_session=False)
  7. #当我们执行seesion.query(...)之后,得到的是一个sql语句
    #通过all()方法可以得到对象(行) #相当于:select * from usertype;
    user_type_list = session.query(UserType).all() #取出来的是对象
    for row in user_type_list:
    print(row.id,row.title) #相当于:select * from usertype where id>2;
    user_type_list = session.query(UserType).filter(UserType.id>2)
  8. 条件
    #相当于where后面的条件
    ret = session.query(Users).filter_by(name='hsr').all() #如果filter里面参数直接用逗号隔开,相当于and
    ret = session.query(Users).filter(Users.id > 1, Users.name == 'hsr').all() #范围between
    ret = session.query(Users).filter(Users.id.between(1, 3), Users.name == 'hsr').all() #包括in
    ret = session.query(Users).filter(Users.id.in_([1,3,4])).all() #not in
    ret = session.query(Users).filter(~Users.id.in_([1,3,4])).all() #in 子查询
    ret = session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(name='hsr'))).all() from sqlalchemy import and_, or_
    #and
    ret = session.query(Users).filter(and_(Users.id > 3, Users.name == 'hsr')).all()
    #or
    ret = session.query(Users).filter(or_(Users.id < 2, Users.name == 'hsr')).all()
    #条件1 or 条件2 and条件3 or 条件4
    ret = session.query(Users).filter(
    or_(
    Users.id < 2,
    and_(Users.name == 'hsr', Users.id > 3),
    Users.extra != ""
    )).all()
  9. 通配符
    #跟sql语句的like一样,%匹配多个,_匹配1个
    ret = session.query(Users).filter(Users.name.like('e%')).all()
    ret = session.query(Users).filter(~Users.name.like('e%')).all()
  10. 限制
    #limit
    ret = session.query(Users)[1:2]
  11. 排序
    #按名字降序
    ret = session.query(Users).order_by(Users.name.desc()).all() #按id升序
    ret = session.query(Users).order_by(Users.id.asc()).all()
  12. 分组
    from sqlalchemy.sql import func
    
    ret = session.query(Users).group_by(Users.extra).all()
    ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id)).group_by(Users.name).all() ret = session.query(
    func.max(Users.id),
    func.sum(Users.id),
    func.min(Users.id)).group_by(Users.name).having(func.min(Users.id) >2).all()
  13. 连表
    #按Users.id == Favor.nid连表
    ret = session.query(Users, Favor).filter(Users.id == Favor.nid).all() #笛卡尔积
    ret = session.query(Person).join(Favor).all() #左连接
    ret = session.query(Person).join(Favor, isouter=True).all()
  14. 组合
    q1 = session.query(Users.name).filter(Users.id > 2)
    q2 = session.query(Favor.caption).filter(Favor.nid < 2)
    ret = q1.union(q2).all() q1 = session.query(Users.name).filter(Users.id > 2)
    q2 = session.query(Favor.caption).filter(Favor.nid < 2)
    ret = q1.union_all(q2).all()
  15. 子查询
    #例1:select * from (select * from tb) as B
    q1 = session.query(UserType).filter(UserType.id > 0).subquery()
    result = session.query(q1).all()
    print(result) #例2(重点是as_scalar())
    select
    id ,
    (select * from users where users.user_type_id=usertype.id)
    from usertype; session.query(UserType,session.query(Users).filter(Users.id == 1).subquery())
    session.query(UserType,Users)
    result = session.query(UserType.id,session.query(Users).as_scalar())
    print(result)
    result = session.query(UserType.id,session.query(Users).filter(Users.user_type_id==UserType.id).as_scalar())
    print(result)
  16. 关系
    #获取用户信息以及与其关联的用户类型名称
    class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(30),nullable=True)
    email = Column(String(30),nullable=True)
    user_type_id = Column(Integer,ForeignKey('usertype.id'))
    user_type = relationship('UserType',backref='xx') #新增 user_list = session.query(Users)
    for row in user_list:
    print(row.name,row.id,row.user_type.title)

ORM框架 SQLAlchemy的更多相关文章

  1. ORM框架SQLAlchemy与权限管理系统的数据库设计

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...

  2. MySQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  3. ORM框架SQLAlchemy

    SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...

  4. python(十二)下:ORM框架SQLAlchemy使用学习

    此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...

  5. MySQL 第八篇:ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  6. SQL学习笔记八之ORM框架SQLAlchemy

    阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...

  7. ORM框架SQLAlchemy使用学习

    参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...

  8. DAY11-MYSQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  9. flask的orm框架(SQLAlchemy)-操作数据

    # 原创,转载请留言联系 Flask-SQLAlchemy 实现增加数据 用 sqlalchemy 添加数据时,一定要注意,不仅仅要连接到数据表,并且你的创建表的类也必须写进来.而且字段和约束条件要吻 ...

  10. flask的orm框架(SQLAlchemy)-创建表

    # 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...

随机推荐

  1. ZOJ 1450

    最小圆覆盖 #include <iostream> #include <algorithm> #include <cstdio> #include <cmat ...

  2. HDOJ 5421 Victor and String 回文串自己主动机

    假设没有操作1,就是裸的回文串自己主动机...... 能够从头部插入字符的回文串自己主动机,维护两个last点就好了..... 当整个串都是回文串的时候把两个last统一一下 Victor and S ...

  3. 通俗编程——白话NIO之Buffer

    Buffer简单介绍 Buffer意为缓冲区.其本质上就是是一块可写入数据,然后能够从中读取数据的内存区域.通过该种方式有助于降低系统开销和提高外设效率.对于缓冲区我们早有所了解,比方在C中标准I/O ...

  4. hdu - 4920 - Matrix multiplication(缓存优化+开挂)

    题意:求两个n x n的矩阵相乘后模3的结果,n <= 800. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 -->>呀呀 ...

  5. 使用Python生成源文件的两种方法

    利用Python的字符串处理模块,开发者能够编写脚本用来生成那些格式同样的C.C++.JAVA源程序.头文件和測试文件,从而避免大量的反复工作. 本文概述两种利用Python string类生成jav ...

  6. 【LeetCode OJ 136】Single Number

    题目链接:https://leetcode.com/problems/single-number/ 题目:Given an array of integers, every element appea ...

  7. UML的基本图(二)

     Both sequence diagrams and communication diagrams are kinds of interaction diagrams. An interacti ...

  8. 0x55 环形与后效性问题

    poj2228 分第一天是否熟睡DP两次 #include<cstdio> #include<iostream> #include<cstring> #includ ...

  9. hdoj--3072--Intelligence System(scc+缩点+数据去重)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  10. Endnote导入共享数据

    Endnote导入共享数据 Endnote是我们经常使用的参考文献管理工具.但是,在云计算还不是很普及的今天,往往每台电脑上都有自己的endnote数据库.这样,换了电脑,要使用同样的参考文献数据时, ...