SqlAlchemy操作(三)
1.基于SQLALCHEMY建表
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import sessionmaker,relationships
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123456@132.232.55.XX:3306/db1",
max_overflow =5,encoding="utf-8")
BaseModel =declarative_base() class Role(BaseModel):
__tablename__ ="role"
rid =Column(Integer,primary_key=True,autoincrement=True)
role_name =Column(String(10)) def __repr__(self):
output ="(%s,%s)"%(self.rid,self.role_name)
return output class User(BaseModel):
__tablename__ = "user"
nid =Column(Integer,primary_key=True,autoincrement=True)
name =Column(String(10),nullable=False)
role =Column(Integer,ForeignKey("role.rid"))
def __repr__(self): output="(%s,%s,%s)"%(self.nid,self.name,self.role) return output BaseModel.metadata.create_all(engine)

二、修改表结构:
1.安装migrate组件 pip install flask-migrate

三、为表添加数据.
Session =sessionmaker(bind =engine)
session =Session() #添加角色数据
session.add(Role(role_name = "dba"))
session.add(Role(role_name ="sa"))
session.add(Role(role_name ="net")) #添加用户数据 session.add_all([
User(name ="fujiz",role =""),
User(name ="fu",role =""),
User(name ="meng",role =""),
User(name ="bin",role =""),
])
session.commit()
session.close()
|||
四、连表查询.
res = session.query(User,Role).join(Role).all() #查询所有用户,及对应的role id
print(res)
输出结果:[((1,fujiz,1), (1,dba)), ((2,fu,2), (2,sa)), ((3,meng,2), (2,sa)), ((4,bin,3), (3,net))]
res2 =session.query(User,Role.role_name).join(Role).all() #查询所有用户和角色
print(res2)
输出结果:[((1,fujiz,1), 'dba'), ((2,fu,2), 'sa'), ((3,meng,2), 'sa'), ((4,bin,3), 'net')]
res3 =session.query(User.name,Role.role_name).join(Role,isouter=True).filter(Role.role_name=="sa").all()
#查询所有DBA用户
print(res3)
输出结果:[('fu', 'sa'), ('meng', 'sa')]
五、使用relationship添加映射关系
class User(BaseModel):
__tablename__ = "user"
nid =Column(Integer,primary_key=True,autoincrement=True)
name =Column(String(10),nullable=False)
role =Column(Integer,ForeignKey("role.rid"))
group=relationship("Role",backref ="uu") #Role为类名.
1.正向查询
res4 =session.query(User).all() #查询所有的用户和角色
print(res4)
for i in res4:
print(i.name,i.group.role_name) #此时的i.group 就是role表对应的关系。 输出结果:
[(1,fujiz,1), (2,fu,2), (3,meng,2), (4,bin,3), (5,fujiz,1), (6,fu,2), (7,meng,2), (8,bin,3)]
fujiz dba
fu sa
meng sa
bin net
fujiz dba
fu sa
meng sa
bin net
2.反向查询.
res5 =session.query(Role).filter(Role.role_name =="dba").first()
# 查询dba组下的所有用户
print("",res5.uuu) #此时print的结果为
for i in res5.uuu:
print(i.name,res5.role_name) 打印结果:
22 [(1,fujiz,1), (5,fujiz,1), (25,fujiz,1)]
fujiz dba
fujiz dba
fujiz dba
说明
relationship 在user表中创建了新的字段,这个字段只用来存放user表中和role表中的对应关系,在数据库中并不实际存在
正向查找: 先从user表中查到符合name的用户之后,此时结果中已经存在和role表中的对应关系,group对象即role表,所以直接使用obj.group.role_name就可以取出对应的角色
反向查找:relationship参数中backref='uuu',会在role表中的每个字段中加入uuu,而uuu对应的就是本字段在user表中对应的所有用户,所以,obj.uuu.name会取出来用户名
所谓正向和反向查找是对于relationship关系映射所在的表而说,如果通过该表(user表)去查找对应的关系表(role表),就是正向查找,反正通过对应的关系表(role表)去查找该表(user表)即为反向查找。而relationship往往会和ForeignKey共存在一个表中。
六,多对多操作.
https://www.cnblogs.com/pycode/p/mysql-orm.html
SqlAlchemy操作(三)的更多相关文章
- flask 操作mysql的两种方式-sqlalchemy操作
flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...
- {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...
- Python3.x:SQLAlchemy操作数据库
Python3.x:SQLAlchemy操作数据库 前言 SQLAlchemy是一个ORM框架(Object Rational Mapping,对象关系映射),它可以帮助我们更加优雅.更加高效的实现数 ...
- Python之Mysql及SQLAlchemy操作总结
一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...
- GIS基础软件及操作(三)
原文 GIS基础软件及操作(三) 练习三.地图配准操作 1.对无坐标信息的地形图(图片格式)进行地图配准操作2.编辑器的使用(点要素.线要素.多边形要素的数字化) 本例主要介绍如何给无坐标信息的地形图 ...
- 04:sqlalchemy操作数据库
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- SqlAlchemy操作(二)
SQLALchemy初始化链接数据库 1. 数据库配置. https://www.cnblogs.com/mengbin0546/p/10124560.html 2. python端操作. 一. ...
- python ORM - sqlalchemy 操作使用
python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ...
- 04:sqlalchemy操作数据库 不错
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
随机推荐
- 6-Qt给父widget加上styleSheet(添加背景图)而不改变子widget的styleSheet的方法
Qt给父widget加上styleSheet(添加背景图)而不改变子widget的styleSheet的方法 比如用stylesheet给widget加背景图,可以用qt designer修改ui文件 ...
- Spring整合JMS——事务管理
Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...
- 零基础学习hadoop到上手工作线路指导(中级篇)
此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...
- hibernate编写流程
1.加载hibernatexml配置文件 2.创建sessionFactory 3.根据sessionFactory创建session 4.开启事务 5.持久化操作 6.提交事务 7.释放资源 其中第 ...
- 原型工具之团队协作: Axure VS Mockplus
一款软件产品的诞生,必然会经历一个过程:需求分析.设计.开发.测试.上线.如此反复迭代.而设计阶段中,原型设计.制作.交流.审核.迭代,是软件设计和开发的重要保障. 简单的一段话,我们可以解读出很多隐 ...
- DB2分页查询SQL
select * from (select row_number() over() as rown,tpag.* from(SELECT int(COALESCE(列名1,0)),COALESCE(列 ...
- IT 技术网站收集
## 脚本之家 http://www.jb51.net/ ## 菜鸟教程 http://www.runoob.com/ ## 编程中国 https://www.bccn.net/ ##
- vs 2015 运行安卓报错
vs2015 start Android 错误信息如下: Severity Code Description Project File Line Suppression StateError java ...
- 【Java】Eclipse在线安装SVN插件
安装环境 系统:win7系统 软件:eclipse(Mars.2 Release (4.5.2)) 安装步骤 1. 打开eclipse软件,点击菜单栏的help——>Install New So ...
- 流程控制 if while for 已及数字类型 进制转换
一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...