知識點: 一、模型類建立 二、模型類關係 三、模型數據添加python
在Flask-SQLAlchemy中,插入、修改、刪除操做,均由數據庫會話管理。會話用db.session表示。在準備把數據寫入數據庫前,要先將數據添加到會話中而後調用commit()方法提交會話。mysql
數據庫會話是爲了保證數據的一致性,避免因部分更新致使數據不一致。提交操做把會話對象所有寫入數據庫,若是寫入過程發生錯誤,整個會話都會失效。sql
數據庫會話也能夠回滾,經過db.session.rollback()方法,實現會話提交數據前的狀態。數據庫
咱們用王者榮耀類型和英雄中的關係來建立模型類。好比射手類型對應了不少英雄: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"))
複製代碼
上面咱們已經提到在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