使用Flask來實現mysql的基本操作
阿新 • • 發佈:2019-01-07
使用SQLAlchemy操作資料庫
為了簡化資料庫操作,我們將使用SQLAlchemy一個數據庫工具(ORM,即物件關係對映)。藉助SQLAlchemy,你可以通過定義Python類來表示資料庫裡的一張表(類屬性表示表中的欄位/列),通過對這個類進行各種操作來代替寫SQL語句。這個列我們稱之為模型類,類中的屬性我們將稱之為欄位。
Flask有大量的第三方擴充套件,這些擴充套件可以簡化和第三方庫的整合工作。
首先我們要“初始化”操作。匯入擴充套件類,例項化並傳入Flask程式例項:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app=Flask(__name__) db=SQLAlchemy(app)
配置引數
class Config(object):
"""配置引數"""
#sqlalchemy的配置引數
SQLALCHEMY_DATABASE_URI="mysql://root:[email protected]:3306/db_python04"
#設定sqlalchemy自動跟蹤資料庫
SQLALCHEMY_TRACK_MODIFICATIONS=True
app.config.from_object(Config)
SQLALCHEMY_DATABASE_URL的組成為:資料庫型別名稱://資料庫使用者名稱名稱:密碼@地址:埠/資料庫名稱
告訴資料庫的連線地址
建立資料庫模型
class Role(db.Model): """使用者角色/身份表""" __tablename__="tbl_roles" id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(32),unique=True) users=db.relationship("User",backref="role") class User(db.Model): """使用者表""" __tablename__="tbl_users" #指明資料庫表名 id=db.Column(db.Integer,primary_key=True) #主鍵 整型的主鍵預設設定為自增 name=db.Column(db.String(64),unique=True) #唯一性 email=db.Column(db.String(128),unique=True) password=db.Column(db.String(128)) role_id=db.Column(db.Integer,db.ForeignKey("tbl_roles.id")) #外來鍵欄位
模型類的編寫的限制:
- 模型類要宣告繼承db.Model
- 每一個類屬性(欄位)都要例項化db.Column,傳入的引數為欄位型別
- 在
db.Column()
中新增額外的選項(引數)可以對欄位進行設定。比如,primary_key
設定當前欄位是否為主鍵。除此之外,常用的選項還有nullable
(布林值,是否允許為空值)、index
(布林值,是否設定索引)、unique
(布林值,是否允許重複值)、default
(設定預設值)等。
常用的欄位型別如下所示:
- db.Interger 整型
- db.String(size) 字串 ,size為最大長度
- db.text() 文字型別
- db.float() 浮點型
- d.boolean() 布林型
建立資料庫表
#使用drop_all清除資料庫中的所有資料
db.drop_all()
#建立所有的表
db.create_all()
db.drop_all()刪除之前建立過的所有資料
db.create_all()建立所有的表
建立
role1=Role(name="admin")
#session記錄物件任務
db.session.add(role1)
#提交任務到資料庫中
db.session.commit()
最後一行 db.session.commit()
很重要,只有呼叫了這一行才會真正把記錄提交進資料庫,前面的 db.session.add()
呼叫是將改動新增進資料庫會話(一個臨時區域)中。
讀取
通過對模型類的query屬性呼叫可選的過濾方法,我們就可以獲取到單個或多個記錄(記錄以模型類的例項表示)。查詢語句如下:
<模型類>.query.<過濾方法(可選)>.<查詢方法>
下面是一些常用的過濾方法:
- filter():使用指定的規則過濾記錄,返回新產生的查詢物件
- filter_by():使用指定規則過濾記錄(以關鍵字表達式的形式),返回新產生的查詢物件
- order_by():根據指定條件對記錄進行排序,返回新產生的查詢物件
- group_by():根據指定條件對記錄進行分組,返回新的查詢物件
下面是一些常用的查詢方法:
- all():返回包含所有查詢記錄的列表
- first():返回查詢的第一條記錄,如果未找到,則返回None
- get(id):傳入主鍵值作為引數,返回指定主鍵值的記錄,如果未找到,則返回None
- count():返回查詢結果的數量
- first_or_404():返回查詢的第一條記錄,如果未找到,則返回404錯誤響應
- get_or_404(id):傳入主鍵值作為引數,返回指定主鍵值的記錄,如果未找到,則返回404錯誤響應
- paginate():返回一個Pagination物件,可以對記錄進行分頁處理
更新
user=User.query.get(1)
user.name="li"
user.email="[email protected]"
db.session.commit()
更新User表中主鍵為1的資料,姓名改成li,email改為[email protected]
刪除
user=User.query.get(1)
db.session.delete(user)
db.session.commit()
刪除主鍵為1的資料