ORM框架 SQLAlchemy
- 什么是ORM
使用关系对象映射进行数据库操作。
将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 分类
-DB first 手动创建数据库和表,自动生成类
-code first 手动创建类和数据库,自动生成表
(SQLAlchemy属于code first) 类 -> 表
对象 -> 行 - 安装SQLAlchemy
pip install SQLAlchemy
- 创建表
#首先导入需要的模块(包含了下面要用的)
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) - 增
#要操作数据库首先要获得一个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) - 删
#以删除id>2的UserType数据为例
session.query(UserType).filter(UserType.id>2).delete() - 改
#将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) - 查
#当我们执行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) - 条件
#相当于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() - 通配符
#跟sql语句的like一样,%匹配多个,_匹配1个
ret = session.query(Users).filter(Users.name.like('e%')).all()
ret = session.query(Users).filter(~Users.name.like('e%')).all() - 限制
#limit
ret = session.query(Users)[1:2] - 排序
#按名字降序
ret = session.query(Users).order_by(Users.name.desc()).all() #按id升序
ret = session.query(Users).order_by(Users.id.asc()).all() - 分组
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() - 连表
#按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() - 组合
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() - 子查询
#例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) - 关系
#获取用户信息以及与其关联的用户类型名称
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的更多相关文章
- ORM框架SQLAlchemy与权限管理系统的数据库设计
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...
- MySQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- ORM框架SQLAlchemy
SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...
- python(十二)下:ORM框架SQLAlchemy使用学习
此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...
- MySQL 第八篇:ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- ORM框架SQLAlchemy使用学习
参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...
- DAY11-MYSQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- flask的orm框架(SQLAlchemy)-操作数据
# 原创,转载请留言联系 Flask-SQLAlchemy 实现增加数据 用 sqlalchemy 添加数据时,一定要注意,不仅仅要连接到数据表,并且你的创建表的类也必须写进来.而且字段和约束条件要吻 ...
- flask的orm框架(SQLAlchemy)-创建表
# 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...
随机推荐
- Java中最小的整数为什么是-2147483648
Java中最小的整数为什么是-2147483648 假如只有两位来表示数字,第一位是符号位: 00:0 01:1 11:-1,这个是负数,而且是补码,取反为00,加1成为01,就是-1 10:-2,这 ...
- 2015年趋势科技笔试A卷
题目原题来源:url=BHz9dr7Dbql5Ai0fTaUsi8QH-ieA9UAtw8kpf-Us_cGUnsz7ZIU1SfHIp33Cphcp0n6uPikWL6r8n0a0zQ0wNOMLG ...
- HDU 5380 Travel with candy 单调队列
pid=5380">链接 题解链接:http://www.cygmasot.com/index.php/2015/08/16/hdu_5380 题意: n C 一条数轴上有n+1个加油 ...
- [ASP.Net] 20141228_Dapper文章搜集
DbHelperSQL和Dapper数据访问的性能对比 给力分享新的ORM => Dapper 分享一个轻型ORM--Dapper选用理由
- [ASPX] 模版引擎XTemplate与代码生成器XCoder(源码)
模版引擎XTemplate是一个仿T4设计的引擎,功能上基本与T4一致(模版语法上完全兼容T4,模版头指令部分兼容). 自己设计模版引擎,就是为了代码生成器.网站模版.邮件模版等多种场合,也就是要能拿 ...
- 使用filezella服务器安装ftp
使用FileZilla配置FTP站点,可参考以下步骤: 1.打开Filezilla Server服务端: 点击[Edit]->[Users],或者点击如下图标新增用户. 2.添加FTP帐号后,设 ...
- 在量化金融中15个最流行的Python数据分析库
Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...
- CentOS6.5下nginx-1.8.1.tar.gz的单节点搭建(图文详解)
不多说,直接上干货! [hadoop@djt002 local]$ su root Password: [root@djt002 local]# ll total drwxr-xr-x. root r ...
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
- 深度讲解智能硬件手机APP开发流程
常州做APP开发公司紫竹云科技分析,智能硬件产品的软件开发,除了APP和后台之外还有一个固件端的开发,由于固件是要运行产品上的,不过此时的硬件也是刚开始进行研发,所以是无法提供硬件来运行固件的.因此在 ...