Flask框架從入門到精通之模型建立與添加(十二)

知識點: 一、模型類建立 二、模型類關係 三、模型數據添加python

1、概況

在Flask-SQLAlchemy中,插入、修改、刪除操做,均由數據庫會話管理。會話用db.session表示。在準備把數據寫入數據庫前,要先將數據添加到會話中而後調用commit()方法提交會話。mysql

數據庫會話是爲了保證數據的一致性,避免因部分更新致使數據不一致。提交操做把會話對象所有寫入數據庫,若是寫入過程發生錯誤,整個會話都會失效。sql

數據庫會話也能夠回滾,經過db.session.rollback()方法,實現會話提交數據前的狀態。數據庫

2、建立模型類

咱們用王者榮耀類型和英雄中的關係來建立模型類。好比射手類型對應了不少英雄:flask

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql

pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 設置鏈接數據庫的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/db_flask'

# 設置每次請求結束後會自動提交數據庫中的改動
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

# 數據庫和模型類同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)


# 類型
class Type(db.Model):
    # 表名
    __tablename__ = 'tbl_types'

    # 數據庫真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主鍵
    name = db.Column(db.String(32), unique=True)  # 名字

    # 數據庫中不存在的字段,只是爲了查找和反向查找。
    # backref:在關係的另外一模型中添加反向引用
    heros = db.relationship("Hero", backref='type')


# 英雄
class Hero(db.Model):
    # 表名
    __tablename__ = 'tbl_heros'
    # 數據庫真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主鍵
    name = db.Column(db.String(64), unique=True)  # 名字
    gender = db.Column(db.String(64))  # 性別

    # 外鍵 一個射手對應不少英雄
    type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id"))
複製代碼

3、建立表和添加數據

上面咱們已經提到在Flask-SQLAlchemy中,插入、修改、刪除操做,均由數據庫會話管理。session

if __name__ == '__main__':
    # 0.0.0.0表明任何能表明這臺機器的地址均可以訪問
    # app.run(host='0.0.0.0', port=5000) # 運行程序

    db.drop_all()  # 清楚數據庫全部數據 只試用第一次運行
    db.create_all()  # 建立表

    type1 = Type(name='射手')
    db.session.add(type1)  # 添加到會話
    db.session.commit()  # 提交

    type2 = Type(name='坦克')
    db.session.add(type2)
    db.session.commit()

    type3 = Type(name='法師')
    type4 = Type(name='刺客')
    db.session.add_all([type3, type4])  # 添加多個
    db.session.commit()

    hero1 = Hero(name='后羿', gender='男', type_id=type1.id)
    hero2 = Hero(name='程咬金', gender='男', type_id=type2.id)
    hero3 = Hero(name='王昭君', gender='女', type_id=type3.id)
    hero4 = Hero(name='安琪拉', gender='女', type_id=type3.id)
    hero5 = Hero(name='蘭陵王', gender='男', type_id=type4.id)

    db.session.add_all([hero1, hero2, hero3, hero4, hero5])  # 添加多個
    db.session.commit()
複製代碼

咱們登入本地數據庫查看一下: app

在這裏插入圖片描述
查詢英雄類型:
在這裏插入圖片描述
查詢英雄:
在這裏插入圖片描述
歡迎關注個人公衆號:

image
相關文章
相關標籤/搜索