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...