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. google中guava类库:AsyncEventBus

    1.guava事件总线(AsyncEventBus)使用 1.1引入依赖 <dependency> <groupId>com.google.guava</groupId& ...

  2. linux整合apache、php、mysql

    1.打开apache配置文件,添加AddType.找到DirectoryIndex并添加index.php AddType application/x-httpd-php .php AddType a ...

  3. maven的下载

    1.maven的下载地址:http://maven.apache.org/download.cgi.下载3.3.9版本(在选择下载的版本是要与JDK契合). 2.下载之后,解压的文件放的位置尽量不要有 ...

  4. vmware fusion 10序列号

    vmware fusion pro  10序列号   亲测可用激活 FG3TU-DDX1M-084CY-MFYQX-QC0RD

  5. 设计规范VS设计创造力,谁更胜一筹?

    设计规范和设计创造力哪个更重要?这是一个颇具争议性的话题.如果是3年前问我这个问题我会毫不犹豫的选择设计创造力,毫无疑问,一个好的设计创造力真的是可以让人像打了鸡血一样疯狂. 原来在上大学的时候,我就 ...

  6. Python自动化面试必备 之 你真明白装饰器么?

    Python自动化面试必备 之 你真明白装饰器么? 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕 ...

  7. Kubernetes web界面kubernetes-dashboard安装

    本文讲述的是如何部署K8s的web UI,前提是已经有一个k8s集群后,按照如下步骤进行即可.(如下步骤都是在master节点上进行操作) 1.下载kubernetes-dashboard.yaml文 ...

  8. Linux命令:ps

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  9. python pip国内源

    pip国内的这个源最快   清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 修改源方法: 临时使用: 可以在使用pip的时候在后面加上-i参数,指定pip ...

  10. 教你把p标签的一行字掰弯文字换行): word-wrap: break-word;

    1 使用前的p是这样: 2  使用后: p{ word-wrap: break-word; overflow: hidden; } 3  又想变直: p{ word-wrap: normal; ove ...