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

 *按上圖邏輯,從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個,同[0]
        dic = {}
        dic['VIP_info'] = info.VIPInfo.info  # 注意,這里的.vipInfo就是model中的relationship一欄的backref參數1
        dic['money'] = info.money
        return json.dumps(dic, ensure_ascii=False)

測試

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com