Flask--使用普通的方法連線MySQL資料庫(不使用ORM)
阿新 • • 發佈:2019-02-16
之前通過學習極客學院的視訊入門Flask的,它裡面教授連線MySQL的方法的是不使用ORM,而是通過Flask的MySQLdb模組直接連線MySQL資料庫。
它的結構是
- 資料庫操作:mydb.py
- 檢視邏輯:views.py
model.py
# excute database operation
# -*- coding:UTF-8 -*-
#該檔案是作為資料庫操作的“驅動”程式
import MySQLdb
conn = MySQLdb.connect("localhost", "root", "123456", "test")
cur = conn.cursor()
def addUser(username, password):#註冊新使用者
sql = "insert into user (username,password) values ('%s','%s')" % (username, password)
cur.execute(sql)
conn.commit()
conn.close()
def isExisted(username, password):#檢查使用者是否存在
sql = "select * from user where username ='%s' and password ='%s'" % (username, password)
cur.execute(sql)
result = cur.fetchall()
if (len(result) == 0):
return False
else:
return True
views.py
# -*- coding:UTF-8 -*-
from flask import Flask
from flask import request
from flask import render_template
from flask import Response
from mydb import* # 引入資料庫操作
app = Flask(__name__)
@app.route('/')
@app.route('/home')
def home():
return render_template('home.html')
@app.route("/updown/<value>", methods=['GET', 'POST'])
def updown(value):
temple = int(value)
addValue(value,1)
return 'ok'
if __name__ == '__main__':
app.run()
這個種方法,有一個缺點大約每過8個小時,它就無法訪問資料庫,即出現500內部伺服器錯誤。
解決辦法
Flask 中 @app.before_request、@app.after_request 和 @app.teardown_request ,flask中又兩種 context(上下文),分別是 application context 和 request context。其中 request 就是 request context。當 HTTP 請求過來的時候,進入這個上下文。題主的那些方法都是一些 flaks 的 hooks。用於針對 request 做一些操作,比如
- before_request :在請求收到之前繫結一個函式做一些事情。
- after_request: 每一個請求之後繫結一個函式,如果請求沒有異常。
- teardown_request: 每一個請求之後繫結一個函式,即使遇到了異常。
至於用來幹嘛?可以做很多關於request pre的事情,和request after 的事情。比如,before_request 的時候建立一個 db 連線,然後 teardown_request 的時候斷開這個連線.
import MySQLdb
from app import app
conn = None
cur = None
# 連線資料庫連線
@app.before_request
def create_db():
global conn
global cur
conn = MySQLdb.connect("101.200.46.138", "admin", "987654", "db_ShoolBus")
cur = conn.cursor()