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. 【JVM】浅谈双亲委派和破坏双亲委派

    一.前言 笔者曾经阅读过周志明的<深入理解Java虚拟机>这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践才能加深理解,正应 ...

  2. struts2框架值栈的概述之问题一:什么是值栈?

    1. 问题一:什么是值栈? * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlVa ...

  3. struts框架问题六之从值栈中获取值

    6. 问题六: 在JSP中获取值栈的数据 * 总结几个小问题: > 访问root中数据 不需要# > 访问context其它对象数据 加 # > 如果向root中存入对象的话,优先使 ...

  4. CentOS7下搭建基本LNMP环境,部署WordPress

    系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nginx-1.12.2.tar.gz php 7.1.11 ...

  5. Python.__getattr__Vs__getattribute__

    __getattr__ Vs __getattribute__ class Fish(object): def __getattr__(self, key): if key == 'color': p ...

  6. Mockplus教程:分分钟搞定APP首页原型设计

    Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...

  7. 强制另存文件和加扩展名的代码c#

    强制另存为文件+扩展名的代码using System;using System.Collections.Generic;using System.Linq;using System.Web; name ...

  8. 想到的regular方法果然已经被sklearn实现了就是L1和L2组合rugular

  9. sklearn 算法大全

    http://scikit-learn.org/stable/tutorial/machine_learning_map/

  10. 【Linux】Jenkins配置和使用(二)

    摘要 本章介绍Jenkins的简单使用,关于Jenkins的安装,参照[Linux]Jenkins安装(一) 事例说明:在linux环境下,安装的jenkins,集成svn,tomcat的环境,项目是 ...