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操作(三)的更多相关文章

  1. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

  2. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  3. Python3.x:SQLAlchemy操作数据库

    Python3.x:SQLAlchemy操作数据库 前言 SQLAlchemy是一个ORM框架(Object Rational Mapping,对象关系映射),它可以帮助我们更加优雅.更加高效的实现数 ...

  4. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

  5. GIS基础软件及操作(三)

    原文 GIS基础软件及操作(三) 练习三.地图配准操作 1.对无坐标信息的地形图(图片格式)进行地图配准操作2.编辑器的使用(点要素.线要素.多边形要素的数字化) 本例主要介绍如何给无坐标信息的地形图 ...

  6. 04:sqlalchemy操作数据库

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  7. SqlAlchemy操作(二)

    SQLALchemy初始化链接数据库 1. 数据库配置. https://www.cnblogs.com/mengbin0546/p/10124560.html 2.  python端操作. 一.  ...

  8. python ORM - sqlalchemy 操作使用

    python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库'''   ...

  9. 04:sqlalchemy操作数据库 不错

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

随机推荐

  1. 两个应用之间传递广播的规则 Broadcast

    sendBroadcast(new Intent(Config.ACTION_PRINT),”com.qf.permission.print”);先判断应用有没有对应的权限 再去判断有没有对应的act ...

  2. Java一个文件上传工具类

    /** * 文件上传 * * @author cary * @since 2012-12-19 下午2:22:12 */ public class FileUploader { static fina ...

  3. CSS 关键的基础知识

    今晚看了 百度传课 一门关于CSS的课程, 感觉不错, 随手记了点儿笔记, 供以后查阅. =================================================== pos ...

  4. HTML5/CSS3基础

    1. HTML 1.1 什么是HTML HTML是用来制作网页的标记语言 HTML是Hypertext Markup Language的英文缩写,即超文本标记语言 HTML语言是一种标记语言,不需要编 ...

  5. 2018.10.23 NOIP模拟 “新”的家园(缩图+dijksta/spfa)

    传送门 考试70分骗分写挂了=30分=全场最低. 哎今天230垫底了. 这题出的挺好. 对于非关键点直接缩点. 每次把要查的insertinsertinsert进缩好的图里面跑spfa/dijkstr ...

  6. 2018.09.24 bzoj1016: [JSOI2008]最小生成树计数(并查集+搜索)

    传送门 正解是并查集+矩阵树定理. 但由于数据范围小搜索也可以过. 我们需要知道最小生成树的两个性质: 不同的最小生成树中,每种权值的边出现的个数是确定的 不同的生成树中,某一种权值的边连接完成后,形 ...

  7. Django入门与实践-第14章:用户注册(完结)

    http://127.0.0.1:8000/signup/ django-admin startapp accounts INSTALLED_APPS = [ 'accounts', ] # mypr ...

  8. 【转】ORACLE 表空间扩展方法

    转载地址:http://blog.itpub.net/28950170/viewspace-763139/ 第一步:查看表空间的名字及文件所在位置: select tablespace_name, f ...

  9. <%@ include file=""%>与<jsp:include page=""/>

    https://www.cnblogs.com/sharpest/p/6117629.html

  10. IntelliJ IDEA 2017版 SpringBoot的web项目补充

    一.注解        @SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置.        @Configuration:这是一个配置Sprin ...