前言

本章应该是SQLAlchemy使用系列的最后一篇了,本章简单讲一下如何搭配Flask使用.下一篇应该是写Flask_restful相关内容了

正文

我们简单使用前两章的model,两张表

# -*- coding=utf- -*-

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, ForeignKey # 用户名:密码@访问地址:端口/数据库?编码方式
engine = create_engine('mysql+mysqldb://root:***@***:***/website?charset=utf8mb4')
# 创建DBSession类型
DBSession = sessionmaker(bind=engine) # 创建Base基类
Base = declarative_base() class AdminUser(Base):
# 超级用户表
__tablename__ = 'admin_user' # 表名
id = Column(Integer, primary_key=True) # 主键
username = Column(String(), nullable=False, index=True, unique=True) # 用户名,Varchar12位,不可为空,常规索引
pwd = Column(String(), nullable=False) # 密码,不可为空
token = Column(String()) # token class VIP(Base):
# VIP用户
__tablename__ = 'VIP' # 表名
id = Column(Integer, primary_key=True) # id
name = Column(String(), nullable=False, index=True, unique=True) # name
pwd = Column(String(), nullable=False) # pwd
money = Column(Integer, nullable=True) # 金币
status = Column(Integer, nullable=False) # 账号状态(:正常,:封禁,:审核) class VIPInfo(Base):
# VIP信息
__tablename__ = 'VIP_info' # 表名
id = Column(Integer, primary_key=True) # id
info = Column(String()) # 备注
VIP_id = Column(Integer, ForeignKey('VIP.id'), unique=True, index=True) # 关联外键VIP.id(多对一)
VIP = relationship('VIP', backref=backref('VIPInfo', uselist=False)) # 设置关联使VIPInfo能查询到VIP

*按上图逻辑,从VIPInfo查询VIP使用 .VIP(relationship第一个值), 从VIP查询到VIPInfo使用 .VIPInfo(backref值) / .join的形式是全连接查询,因此如果附表无值会查找不到,这种情况下使用 .outerjoin(左连接) 查询即可

然后我们在 main 内先引入 model

from app.website.models import VIP, VIPInfo, DBSession  // DBSession必须引入,然后是用到的各个model

当然 Flask 的相关组件也要引入,这里不再赘述

简单做一个函数,返回

@website.route('/website/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
session = DBSession() # 生成会话
id = request.args.get('id') # 用户id
info = session.query(VIP).join(VIPInfo).filter(VIP.id==id).first() # 取用户id对应的信息,first是取第0个,同[]
dic = {}
dic['VIP_info'] = info.VIPInfo.info # 注意,这里的.vipInfo就是model中的relationship一栏的backref参数1
dic['money'] = info.money
return json.dumps(dic, ensure_ascii=False)

测试

SQLAlchemy使用(三)搭配Flask框架使用的更多相关文章

  1. flask框架学习

    第一:flask框架基础入门 第二:flask框架框架概述 第三:flask框架请求数据 第四:flask框架路由系统 第五:flask框架静态文件 第六:flask框架模板引擎 第七:flask其他 ...

  2. Flask框架使用SQLAlchemy的ORM

    SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

  5. 基于Flask框架搭建视频网站的学习日志(三)之原始web表单

    基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...

  6. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...

  7. flask框架+pygal+sqlit3搭建图形化业务数据分析平台

    一. 前言 先说下主要的框架和主要的图形库的特点:(个人见解) Django:python开发的一个重量级的web框架,集成了MVC和ORM等技术,设计之初是为了使开发复杂的.数据库驱动的网站变得简单 ...

  8. Flask框架搭建一个日程表

    目录 前言 项目介绍 技术栈 Flask Web开发流程 一.搭建环境 1.1: 创建虚拟环境 1.2: 安装依赖包 1.3: 创建依赖包列表文件 1.4: 测试hello word 二.应用程序开发 ...

  9. Python——Flask框架——数据库

    一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...

随机推荐

  1. POJ 2411 Mondriaan's Dream -- 状压DP

    题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...

  2. 判定你的java应用是否正常(是否内存、线程泄漏)的一个简单方法

    给大家推荐一个最简单的判定你的java应用是否正常的方法: step1:部署你的应用,让它跑起来: step2:打开jdk下bin目录下的jconsole.exe工具,连接到你的应用——以监测线程和内 ...

  3. 详解TCP三次握手

    该文pdf下载地址:三次握手.pdf

  4. jqgrid的增删改查

    这个是要写的页面(需要引入下面的js页面) 1 <div class="modal-body" width="100%" style="over ...

  5. [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分

    题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. ...

  6. EL表达式+JSTL

    一. EL表达式 1.1 什么是EL EL是JSP表达式语言,全称是Expression Language,提供了JSP中简化表达式的方法. 1.2 如何学习EL 没有EL的时候 怎么写 用EL表达式 ...

  7. html中设置锚点定位

    1.使用id定位: (这样的定位可以针对任何标签来定位. ) <a name="1F" href="#1F">锚点1</a> <d ...

  8. ROS time stamp and sync

    1. https://answers.ros.org/question/189867/what-is-the-timestamp/ In ROS messages timestamp is taken ...

  9. npm_config_

    npm script时会带一些参数变量,例如: "test": "node scripts/tools/test.js --name=test111" 平常我们 ...

  10. Unity下载

    Unity下载 Mac OS或Windows操作系统都可以使用对应的Unity版本进行开发 Unity引擎的官方网站:http://www.unity3d.com 官方下载地址:http://unit ...