1. 程式人生 > >【Flask學習筆記】數據模型設計

【Flask學習筆記】數據模型設計

odi span ase doc href 評論 pre 和數 ont

【前言】對於像我一樣的新手來說,我覺得此環節難點主要是相關依賴包的安裝和Flask-SQLAlchemy的使用,下面將一一講解:

所謂數據模型,百度的解釋是:“數據模型(Data Model)是數據特征的抽象。數據(Data)是描述事物的符號記錄,模型(Model)是現實世界的抽象。數據模型從抽象層次上描述了系統的靜態特征、動態行為和約束條件,為數據庫系統的信息表示與操作提供了一個抽象的框架。數據模型所描述的內容有三部分:數據結構、數據操作和數據約束。”

這個解釋還算通俗易懂,筆者就不再翻譯了。

數據模型的建立過程相對簡單,主要分為三步:

1.SQLAlchemy對象初始化

【參考資料傳送門】

2.創建表

此過程只不過是SQL語句的堆積,如果SQL語句沒學好,建議自行補課。

3.設置模型的執行入口

一個函數:

if __name__ == "__main__":
db.create_all()

下面詳細介紹:

安裝sqlalchemy的兩種方法:

1.命令行法:

進入虛擬環境-->檢測是否已經安裝--->安裝:

技術分享圖片

方法2:在Pycharm中安裝

技術分享圖片

技術分享圖片

以上準備工作做好了,就可以正式開始了:

先進入mysql,建立一個名為movie的數據庫(不知道如何建立?那就先學完MYSQL的相關知識):

create database moive

再查詢一下是否建立成功:

技術分享圖片

2.數據模型設計

以“會員”為例(附完整代碼):

技術分享圖片

完整代碼(app/models.py):

  1 # coding=utf-8
  2 from flask import Flask
  3 from flask_sqlalchemy import SQLAlchemy
  4 from datetime import datetime
  5 import pymysql
  6 app = Flask(__name__)
  7 app.config[
SQLALCHEMY_DATABASE_URI] = mysql+pymysql://root:[email protected]:3306/moive 8 #app.config[‘SQLALCHEMY_BINDS‘] = ‘mysql+pymysql://root:[email protected]:3306/movie‘ 9 app.config["SQLAlCHEMY_TRACK_MODIFICATIONS"] = True 10 11 db = SQLAlchemy(app) 12 13 14 # 會員 15 class User(db.Model): 16 __tablename__ = "user" 17 id = db.Column(db.Integer, primary_key=True) 18 name = db.Column(db.String(100), unique=True) 19 pwd = db.Column(db.String(100)) 20 email = db.Column(db.String(100), unique=True) 21 phone = db.Column(db.String(11), unique=True) 22 info = db.Column(db.Text) 23 face = db.Column(db.String(255), unique=True) 24 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 25 uuid = db.Column(db.String(255), unique=True) 26 userlogs = db.relationship(Userlog, backref=user) 27 comments = db.relationship(Comment, backref=user) 28 moivecols = db.relationship(Moivecol, backref=user) 29 30 def __repr__(self): 31 return "<User %r>" % self.name 32 33 34 # 會員登錄日誌 35 class Userlog(db.Model): 36 __tablename__ = "userlog" 37 id = db.Column(db.Integer, primary_key=True) 38 user_id = db.Column(db.Integer, db.ForeignKey(user.id)) 39 ip = db.Column(db.String(100)) 40 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 41 42 def __repr__(self): 43 return "<Userlog %r>" % self.user_id 44 45 46 # 標簽 47 class Tag(db.Model): 48 __tablename__ = "tag" 49 id = db.Column(db.Integer, primary_key=True) 50 name = db.Column(db.String(100), unique=True) 51 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 52 movies = db.relationship(Moive, backref=tag) 53 54 def __repr__(self): 55 return "<Tag %r>" % self.name 56 57 58 # 電影 59 class Moive(db.Model): 60 __tablename__ = "moive" 61 id = db.Column(db.Integer, primary_key=True) 62 title = db.Column(db.String(255), unique=True) 63 url = db.Column(db.String(255), unique=True) 64 info = db.Column(db.Text) 65 logo = db.Column(db.String(255), unique=True) 66 star = db.Column(db.SmallInteger) 67 playnum = db.Column(db.BigInteger) 68 commentnum = db.Column(db.BigInteger) 69 tag_id = db.Column(db.Integer, db.ForeignKey(tag.id)) 70 area = db.Column(db.String(255)) 71 release_time = db.Column(db.Date) 72 length = db.Column(db.String(255)) 73 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 74 comments = db.relationship(Comment, backref=moive) 75 moivecols = db.relationship(Moivecol, backref=moive) 76 77 def __repr__(self): 78 return "<Moive %r>" % self.title 79 80 81 # 上映預告 82 class Preview(db.Model): 83 __tablename__ = "preview" 84 id = db.Column(db.Integer, primary_key=True) 85 title = db.Column(db.String(255), unique=True) 86 logo = db.Column(db.String(255), unique=True) 87 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 88 89 def __repr__(self): 90 return "<Preview %r>" % self.title 91 92 93 # 評論 94 class Comment(db.Model): 95 __tablename__ = "comment" 96 id = db.Column(db.Integer, primary_key=True) 97 content = db.Column(db.Text) 98 moive_id = db.Column(db.Integer, db.ForeignKey(moive.id)) 99 user_id = db.Column(db.Integer, db.ForeignKey(user.id)) 100 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 101 102 def __repr__(self): 103 return "<Comment %r>" % self.id 104 105 106 # 電影收藏 107 class Moivecol(db.Model): 108 __tablename__ = "moivecol" 109 id = db.Column(db.Integer, primary_key=True) 110 moive_id = db.Column(db.Integer, db.ForeignKey(moive.id)) 111 user_id = db.Column(db.Integer, db.ForeignKey(user.id)) 112 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 113 114 def __repr__(self): 115 return "<Moivecol %r>" % self.id 116 117 118 # 權限 119 class Auth(db.Model): 120 __tablename__ = "auth" 121 id = db.Column(db.Integer, primary_key=True) 122 name = db.Column(db.String(100), unique=True) 123 url = db.Column(db.String(255), unique=True) 124 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 125 126 def __repr__(self): 127 return "<Auth %r>" % self.name 128 129 130 # 角色 131 class Role(db.Model): 132 __tablename__ = "role" 133 id = db.Column(db.Integer, primary_key=True) 134 name = db.Column(db.String(100), unique=True) 135 auths = db.Column(db.String(600)) 136 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 137 138 def __repr__(self): 139 return "<Role %r>" % self.name 140 141 142 # 管理員 143 class Admin(db.Model): 144 __tablename__ = "admin" 145 id = db.Column(db.Integer, primary_key=True) 146 name = db.Column(db.String(100), unique=True) 147 pwd = db.Column(db.String(100)) 148 is_super = db.Column(db.SmallInteger) 149 role_id = db.Column(db.Integer, db.ForeignKey(role.id)) 150 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 151 adminlogs = db.relationship("Adminlog", backref=admin) 152 oplogs = db.relationship("oplog", backref=admin) 153 154 def __repr__(self): 155 return "<Admin %r>" % self.name 156 157 158 # 管理員登錄日誌 159 class Adminlog(db.Model): 160 __tablename__ = "adminlog" 161 id = db.Column(db.Integer, primary_key=True) 162 admin_id = db.Column(db.Integer, db.ForeignKey(admin.id)) 163 ip = db.Column(db.String(100)) 164 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 165 166 def __repr__(self): 167 return "<Adminlog %r>" % self.id 168 169 170 # 管理員操作日誌 171 class Oplog(db.Model): 172 __tabelname__ = "oplog" 173 id = db.Column(db.Integer, primary_key=True) 174 admin_id = db.Column(db.Integer, db.ForeignKey(admin.id)) 175 ip = db.Column(db.String(100)) 176 reason = db.Column(db.String(600)) 177 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 178 179 def __repr__(self): 180 return "<Oplog %r>" % self.id 181 182 183 if __name__ == "__main__": 184 db.create_all()

【Flask學習筆記】數據模型設計