python orm框架

#!/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