Flask後端總結-操作MySQL資料庫
阿新 • • 發佈:2018-12-11
第一次正式做專案就用了Flask,主要是因為相對Django框架,flask更好上手。
以下將介紹Flask框架對資料庫的種種使用姿勢:)
版本和環境: MySQL5.7.23 + python 3.6
from flask import Flask, render_template, request, url_for, sessions, redirect, flash, jsonify, make_response from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmaker import config import json import requests import urllib from urllib.request import urlopen, quote app = Flask(__name__) app.config.from_object(config) Base = declarative_base() engine = create_engine("mysql+pymysql://root:
[email protected]:3306/flask", encoding="utf-8", echo=False) #mysql資料庫模型-User class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True, unique=True, nullable=False) username = Column(String(20), nullable=False) pw = Column(String(20), nullable=False) #mysql資料庫模型-Log class Log(Base): __tablename__ = 'log' id = Column(Integer, primary_key=True, nullable=False, unique=True) username = Column(String(20), nullable=False) intercept = Column(String(20)) type = Column(String(20)) server = Column(String(20)) ip = Column(String(20)) ··· ··· location = Column(String(20)) # 資料庫中沒有資料表時自動建立 Base.metadata.create_all(engine) DBSession = sessionmaker(bind=engine) # 舉例 註冊時與資料庫中資訊進行對比並且將資料存入資料庫中!!!重點 @app.route('/register', methods=['GET', 'POST']) def register(): # 建立資料庫物件 session = DBSession() # get請求則渲染當前介面 if request.method == 'GET': return render_template('register.html') else: # 從前端表單輸入框中獲取資料 username = request.form.get('id') pw = request.form.get('pw') email = request.form.get('email') #查詢資料庫中資料 user = session.query(User).filter(User.username == username).first() if user: # flask 自帶flash訊息提示 flash(' 使用者名稱已存在 ! ') #重定向 return redirect(url_for('register')) else: session = DBSession() #存入資料庫 user = User(username=username, pw=pw, email=email) session.add(user) session.commit() session.close() flash('註冊成功, 請前往登入 !') return redirect(url_for('register')) # 舉例 使用資料庫查詢語句查詢資料庫中資料 # 返回伺服器 其中還使用了cookie來記錄登入的使用者名稱 @app.route('/api/server', methods=['POST', 'get']) def server_data(): username = request.cookies.get("name") jsonData = {} server = [] # 執行SQL語句 curl_server = engine.execute('select server as server from server where username="'+username+'"') # 獲取查詢全部結果 servers = curl_server.fetchall() for item in servers: server.append(item[0]) jsonData['server'] = server data = json.dumps(jsonData) return data
json.dumps : dict轉成str 一個是將字典轉換為字串json.loads: str轉成dict 一個是將字串轉換為字典json.dump 是將python資料儲存成jsonjson.load 是讀取json資料