博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
45 SQLALchemy
阅读量:5174 次
发布时间:2019-06-13

本文共 4103 字,大约阅读时间需要 13 分钟。

SQLAlchemy

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

安装

pip3 install sqlalchemy 
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine # 连接MySQL engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/db3?charset=utf8', max_overflow=5) Base = declarative_base() """ create table db3(     id int auto_increment primary key,     name varchar(32) not null default '',     extra varchar(32) not null default ''     ) """ """ UserType id     title      xx00 1      普通用户 row.xxoo  : 多条记录对象 """ class UserType(Base):     __tablename__ = 'usertype'     id = Column(Integer, autoincrement=True, primary_key=True)     title = Column(String(32), nullable=False, default='') """ users id   name  extra   type_id 1    aa     nz      1 usertype = releationship('Usertype') row.usertype """ class Users(Base):     __tablename__ = 'users'     id = Column(Integer, autoincrement=True, primary_key=True)     name = Column(String(32), nullable=False, default='')     extra = Column(String(32), nullable=False, default='')     type_id = Column(Integer, ForeignKey(UserType.id))     # usertype = relationship('UserType',backref='xx00')     __table_args__ = (         UniqueConstraint('id', 'name', name='mix_id_name'),         # 联合唯一索引         Index('ix_name_extra', 'name', 'extra'),         # 组合索引     ) def drop_db():     Base.metadata.drop_all(engine) # 会将当前执行文件中所有继承自base类的类,生成表 def create_db():     Base.metadata.create_all(engine) create_db() Session = sessionmaker(bind=engine) session = Session() # 增加一条数据 obj = UserType(title='普通用户') session.add(obj) # 添加多条数据 session.add_all([     UserType(title='1'),     UserType(title='2'),     UserType(title='3'),     UserType(title='4'),     UserType(title='5') ]) # 查询 # 查询全部,返回的是一个列表,列表中套对象 res = session.query().all() for row in res:     print(row.id, row.name) # 查询一条数据 res = session.query(UserType).first() print(res) # where 条件 res = session.query(UserType).filter(UserType.name == '1', UserType.id == 2).all() for row in res:     print(row.id, row.name) print(res[0].name, res[0].id) res = session.query(UserType).filter_by(name='1').all() print(res) # 删除 session.query(UserType).filter(UserType.id > 3).delete() # 修改 session.query(UserType).filter(UserType.id == 3).updata({'name': '2'}) # MySQL 高级查询操作 # 通配符  分组 分页 排序 between and in not in # between...and... res = session.query(UserType).filter(UserType.id.between(1, 4)).all() for row in res:     print(row.id, row.title) # in 操作 res = session.query(UserType).filter(UserType.id.in_([1, 2, 5])).all() print(res) # not in # select * from Usertype res = session.query(UserType).filter(~UserType.id.in_([1, 2, 5])).all() for row in res:     print(row.id, row.title) # session.query(UserType).filter(Users.id.in_(session.query(Users.id).filter_by(name='eric'))).all() # res = session.query(UserType.title).filter(~UserType.id.in_([1,3,4])).all() # for row in res: #     print( row.title) from sqlalchemy import and_, or_ # 通配符 # res = session.query(Users).all() from sqlalchemy.sql import func # rea = session.query( #     Users.type_id, #     func.max(Users.id), #     func.min(Users.id)).group_by(Users.type_id).all() # # print(rea) ret = session.query(     func.max(Users.id),     func.min(Users.id)).group_by(Users.type_id).having(func.min(Users.id) > 2).all() # left jion # 1. 查询某一个用户的用户类型 # 第一种方法: res = session.query(Users, UserType).join(UserType, isouter=True).all() print(res) for row in res:     print(row[0].id, row[0].name, row[1].title) # 二 res = session.query(Users).all() for row in res:     print(row.id, row.name, row.extra, row.usertype.tiytle) # 2. 某一个类型下面的用户 ### 第一种方法 res = session.query(UserType).all() for row in res:     print(row.id, row.title, session.query(Users).filter(Users.type_id == row.id)).all() ### 第二种方法 res = session.query(UserType).all() for row in res:     print(row.id, row.title, row.xx00)

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/komorebi/p/11048210.html

你可能感兴趣的文章
简单介绍.Net3.0 中跨线程访问控件
查看>>
oracle imp 工具可能出现的问题
查看>>
bzoj1045题解
查看>>
学习Cocos2d的博客 --推荐
查看>>
SpringMVC中@RequestMapping参数设置
查看>>
lea实现加法
查看>>
文件操作
查看>>
spring容器启动的加载过程(三)
查看>>
java之接口适配器
查看>>
nginx安装手册
查看>>
Find Backpacker Jobs in Australia
查看>>
面试题:return和finally执行
查看>>
Heroku第三方服务接入指南(二)
查看>>
MSRA专访摘要
查看>>
团队作业4
查看>>
第四次团队作业--选题
查看>>
记录专用
查看>>
一句实现jquery导航栏
查看>>
场景分析:用户登录界面场景分析
查看>>
条形码生成包 BarCodeToHTML.cs(以颜色为背景的完整版)(下载的完整版)
查看>>