python sqlalchemy orm框架使用教程

ORM 相当于把数据库也给你实例化了,在代码操作mysql中级又加了orm这一层。 
orm的优点:

隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
ORM使我们构造固化数据结构变得简单易行。
缺点:

无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

玖哥语录: 拿代码来跟爷讲话!

#!/usr/bin/python
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy import Table, MetaData, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import mapper, sessionmaker

# 创建实例,并连接test库
engine = create_engine("mysql+pymysql://root:123@localhost/demoDb?charset=utf8", encoding='utf-8', echo=True)
metadata = MetaData()
# echo=False 显示信息
Base = declarative_base()  # 生成orm基类


class User(Base):
    __tablename__ = 'user'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))

    def __init__(self):
        # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
        self.session_class = sessionmaker(bind=engine)  # 实例和engine绑定
        self.session = self.session_class()  # 生成session实例,相当于游标

    # 创建表
    def create_user(self):
        Base.metadata.create_all(engine)  # 创建表结构 (这里是父类调子类)

    # 新增数据
    def insert_user(self, user):
        self.session.add(use)  # 把要创建的数据对象添加到这个session里, 一会统一创建
        return self.session.commit()  # 现此才统一提交,创建数据

    # 根据一个字段查询
    def sel_user(self):
        my_user = self.session.query(User).filter_by(name="12").first()  # 查询
        return my_user

    '''
    ----------------     条件查询    ---------------- 
        my_user1 = self.session.query(User).filter(User.id > 2).all()
        my_user2 = self.session.query(User).filter_by(id=27).all()  # filter_by相等用‘=’
        my_user3 = self.session.query(User).filter(User.id == 27).all()  # filter相等用‘==’
    ----------------     多条件查询  ----------------
        objs = self.session.query(User).filter(User.id>0).filter(User.id<7).all()

    --------------     模糊查询,返回count    ------------
        self.session.query(User).filter(User.name.like("f%")).count()  # mysql不区分大小写

    ----------------     分组查询    ---------------- 
        self.session.query(User.name,func.count(User.name)).group_by(User.name).all()

    ----------------     连表查询    ---------------- 
        ret = self.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()
    '''
    # 查询所有
    def sel_user_all(self):
        return self.session.query(User).all()
        # return self.session.query(User.id,User.name).all() #查询所有,结果集只包含 id,name

    # 修改操作
    def up_user(self):
        my_user = self.session.query(User).filter_by(name="fgf").first()
        my_user.name = "fenggf"  # 查询出来之后直接赋值修改
        my_user.passwork = "123qwe"
        self.session.commit()

if __name__ == '__main__':
    use = User()
    user_list = use.sel_user_all()
    for us in user_list:
        print us.name
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值