本章應該是SQLAlchemy使用系列的最後一篇了,本章簡單講一下如何搭配Flask使用.下一篇應該是寫Flask_restful相關內容了mysql
咱們簡單使用前兩章的model,兩張表web
# -*- 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?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(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(左鏈接) 查詢便可
sql
而後咱們在 main 內先引入 model數據庫
from app.website.models import VIP, VIPInfo, DBSession // DBSession必須引入,而後是用到的各個model
固然 Flask 的相關組件也要引入,這裏再也不贅述json
簡單作一個函數,返回restful
@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)
測試session