SQLAlchemy使用(三)搭配Flask框架使用教程
前言
本章应该是SQLAlchemy使用系列的最后一篇了,本章简单讲一下如何搭配Flask使用.下一篇应该是写Flask\_restful相关内容了
正文
我们简单使用前两章的model,两张表
# -*- coding=utf-8 -*-
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')
# 创建DBSession类型
DBSession = sessionmaker(bind=engine)
# 创建Base基类
Base = declarative_base()
class AdminUser(Base):
# 超级用户表
__tablename__ = 'admin_user' # 表名
id = Column(Integer, primary_key=True) # 主键
username = Column(String(12), nullable=False, index=True, unique=True) # 用户名,Varchar12位,不可为空,常规索引
pwd = Column(String(256), nullable=False) # 密码,不可为空
token = Column(String(256)) # token
class VIP(Base):
# VIP用户
__tablename__ = 'VIP' # 表名
id = Column(Integer, primary_key=True) # id
name = Column(String(12), nullable=False, index=True, unique=True) # name
pwd = Column(String(25), nullable=False) # pwd
money = Column(Integer, nullable=True) # 金币
status = Column(Integer, nullable=False) # 账号状态(1:正常,0:封禁,2:审核)
class VIPInfo(Base):
# VIP信息
__tablename__ = 'VIP_info' # 表名
id = Column(Integer, primary_key=True) # id
info = Column(String(256)) # 备注
VIP_id = Column(Integer, ForeignKey('VIP.id'), unique=True, index=True) # 关联外键VIP.id(多对一)
VIP = relationship('VIP', backref=backref('VIPInfo', uselist=False)) # 设置关联使VIPInfo能查询到VIP
然后我们在 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个,同[0]
dic = {}
dic['VIP_info'] = info.VIPInfo.info # 注意,这里的.vipInfo就是model中的relationship一栏的backref参数1
dic['money'] = info.money
return json.dumps(dic, ensure_ascii=False)
测试