1. 程式人生 > >使用Flask來實現mysql的基本操作

使用Flask來實現mysql的基本操作

使用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的資料