Flask操作指南四

2021-08-20 23:21:31 字數 3516 閱讀 1400

flask預設並沒有提供任何資料庫操作的api

我們可以選擇任何適合自己專案的資料庫來使用

flask中可以自己的選擇資料,用原生語句實現功能,也可以選擇orm(sqlalchemy,mongoengine)

sqlalchemy是乙個很強大的關係型資料庫框架,支援多種資料庫後台。sqlalchemy提供了高層orm,也提供了使用資料庫原生sql的低層功能。

orm:

將對物件的操作轉換為原生sql

優點 易用性,可以有效減少重複sql

效能損耗少

設計靈活,可以輕鬆實現複雜查詢

移植性好

pip install flask-sqlalchemy

安裝驅動

pip install pymysql
使用sqlalchemy的物件去建立字段

其中tablename指定建立的資料庫的名稱

建立models.py檔案,其中定義模型

from flask_sqlalchemy import sqlalchemy

db = sqlalchemy()

class student(db.model):

s_id = db.column(db.integer, primary_key=true, autoincrement=true)

s_name = db.column(db.string(16), unique=true)

s_age = db.column(db.integer, default=1)

__tablename__ = "student"

其中:

integer表示建立的s_id欄位的型別為整形,

primary_key表示是否為主鍵

string表示該字段為字串

unique表示該欄位唯一

default表示預設值

autoincrement表示是否自增

在檢視函式中我們引入models.py中定義的db

@blue.route("/createdb/")

def create_db():

db.create_all()

return "建立成功"

@blue.route('/dropdb/')

def drop_db():

db.drop_all()

return '刪除成功'

其中: db.create_all()表示建立定義模型中對應到資料庫中的表

db.drop_all()表示刪除資料庫中的所有的表

在定義的init.py檔案中使用sqlalchemy去整合乙個或多個flask的應用

有兩種方式:

第一種:

from flask_sqlalchemy import sqlalchemy

第二種:

資料庫連線的格式:

dialect+driver://username:password@host:port/database

dialect資料庫實現

driver資料庫的驅動

設定如下: 「mysql+pymysql://root:123456@localhost:3306/helloflask」

在初始化init.py檔案中如下配置:

語法:

類名.query.***
獲取查詢集:

all()

filter(類名.屬性名==***)

filter_by(屬性名=***)

資料操作:

在事務中處理,資料插入

db.session.add(object)

db.session.add_all(list[object])

db.session.delete(object)

db.session.commit()

修改和刪除基於查詢

@blue.route('/createstu/')

def create_stu():

s = student()

s.s_name = '小花%d' % random.randrange(100)

s.s_age = '%d' % random.randrange(30)

db.session.add(s)

db.session.commit()

return '新增成功'

提交事務,使用commit提交我們的新增資料的操作

將學生的全部資訊獲取到,並且返回給頁面,在頁面中使用for迴圈去解析即可

@blue.route("/getstudents/")

def get_students():

students = student.query.all()

return render_template("studentlist.html", students=students)

寫法1:

students = student.query.filter(student.s_id==1)
寫法2:

students = student.query.filter_by(s_id=2)
注意:filter中可以接多個過濾條件

寫法3:

sql = 'select * from student where s_id=1'

students = db.session.execute(sql)

寫法1:

students = student.query.filter_by(s_id=3).first()

students.s_name = '哈哈'

db.session.commit()

寫法2:

student.query.filter_by(s_id=3).update()

db.session.commit()

寫法1:

students = student.query.filter_by(s_id=2).first()

db.session.delete(students)

db.session.commit()

寫法2:

students = student.query.filter_by(s_id=1).all()

db.session.delete(students[0])

db.session.commit()

注意:filter_by後的結果是乙個list的結果集

重點注意:在增刪改中如果不commit的話,資料庫中的資料並不會更新,只會修改本地快取中的資料,所以一定需要db.session.commit()

Flask操作指南三

flask中使用jinja2模板引擎 jinja2是由flask作者開發,模仿django的模板引擎 優點 速度快,被廣泛使用 html設計和後端python分離 非常靈活,快速和安全 提供了控制,繼承等高階功能模板中的變數 檢視傳遞給模板的資料 前面定義出來的資料 變數不存在,預設忽略模板中的標籤...

Flask學習筆記(四)

進入虛擬環境 我的電腦的虛擬環境在f盤裡,命令列進入f盤後,直接打入virtualenv flask env scripts activate即可進入我的虛擬環境中使用flask。退出虛擬環境 deactivate 1.dialect driver username password host po...

Flask學習回顧(四)

關於csrf token from flask import flask,render template,request,flash from flask wtf import flaskform from wtforms import stringfield,passwordfield,submi...