一、創建數據庫
在mysql數據庫中創建名為"movie"的數據庫。
二、安裝SQLAlchemy
三、安裝PyMySQL
四、創建數據模型
在app/models.py中編寫數據庫模型:
1 # coding:utf8 2 from flask import Flask 3 from flask_sqlalchemy import SQLAlchemy 4 from datetime import datetime 5 import pymysql 6 7 app = Flask(__name__) 8 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1: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.now) # 注冊時間 25 uuid = db.Column(db.String(255), unique=True) # 唯一標志符 26 userlogs = db.relationship('Userlog', backref='user') # 會員日志外鍵關系關聯 27 comments = db.relationship('Comment', backref='user') # 評論外鍵關系關聯 28 moviecols = db.relationship('Moviecol', backref='user') # 收藏外鍵關系關聯 29 30 def __repr__(self): 31 return "<User %r>" % self.name 32 33 def check_pwd(self, pwd): 34 from werkzeug.security import check_password_hash 35 return check_password_hash(self.pwd, pwd) 36 37 38 # 會員登錄日志 39 class Userlog(db.Model): 40 __tablename__ = "userlog" 41 id = db.Column(db.Integer, primary_key=True) # 編號 42 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬會員 43 ip = db.Column(db.String(100)) # 登錄IP 44 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登錄時間 45 46 def __repr__(self): 47 return "<Userlog %r>" % self.id 48 49 50 # 標簽 51 class Tag(db.Model): 52 __tablename__ = "tag" 53 id = db.Column(db.Integer, primary_key=True) # 編號 54 name = db.Column(db.String(100), unique=True) # 標題 55 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 56 movies = db.relationship("Movie", backref='tag') # 電影外鍵關系關聯 57 58 def __repr__(self): 59 return "<Tag %r>" % self.name 60 61 62 # 電影 63 class Movie(db.Model): 64 __tablename__ = "movie" 65 id = db.Column(db.Integer, primary_key=True) # 編號 66 title = db.Column(db.String(255), unique=True) # 標題 67 url = db.Column(db.String(255), unique=True) # 地址 68 info = db.Column(db.Text) # 簡介 69 logo = db.Column(db.String(255), unique=True) # 封面 70 star = db.Column(db.SmallInteger) # 星級 71 playnum = db.Column(db.BigInteger) # 播放量 72 commentnum = db.Column(db.BigInteger) # 評論量 73 tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 所屬標簽 74 area = db.Column(db.String(255)) # 上映地區 75 release_time = db.Column(db.Date) # 上映時間 76 length = db.Column(db.String(100)) # 播放時間 77 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 78 comments = db.relationship("Comment", backref='movie') # 評論外鍵關系關聯 79 moviecols = db.relationship("Moviecol", backref='movie') # 收藏外鍵關系關聯 80 81 def __repr__(self): 82 return "<Movie %r>" % self.title 83 84 85 # 上映預告 86 class Preview(db.Model): 87 __tablename__ = "preview" 88 id = db.Column(db.Integer, primary_key=True) # 編號 89 title = db.Column(db.String(255), unique=True) # 標題 90 logo = db.Column(db.String(255), unique=True) # 封面 91 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 92 93 def __repr__(self): 94 return "<Preview %r>" % self.title 95 96 97 # 評論 98 class Comment(db.Model): 99 __tablename__ = "comment" 100 id = db.Column(db.Integer, primary_key=True) # 編號 101 content = db.Column(db.Text) # 內容 102 movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所屬電影 103 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬用戶 104 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 105 106 def __repr__(self): 107 return "<Comment %r>" % self.id 108 109 110 # 電影收藏 111 class Moviecol(db.Model): 112 __tablename__ = "moviecol" 113 id = db.Column(db.Integer, primary_key=True) # 編號 114 movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所屬電影 115 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬用戶 116 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 117 118 def __repr__(self): 119 return "<Moviecol %r>" % self.id 120 121 122 # 權限 123 class Auth(db.Model): 124 __tablename__ = "auth" 125 id = db.Column(db.Integer, primary_key=True) # 編號 126 name = db.Column(db.String(100), unique=True) # 名稱 127 url = db.Column(db.String(255), unique=True) # 地址 128 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 129 130 def __repr__(self): 131 return "<Auth %r>" % self.name 132 133 134 # 角色 135 class Role(db.Model): 136 __tablename__ = "role" 137 id = db.Column(db.Integer, primary_key=True) # 編號 138 name = db.Column(db.String(100), unique=True) # 名稱 139 auths = db.Column(db.String(600)) # 角色權限列表 140 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 141 admins = db.relationship("Admin", backref='role') # 管理員外鍵關系關聯 142 143 def __repr__(self): 144 return "<Role %r>" % self.name 145 146 147 # 管理員 148 class Admin(db.Model): 149 __tablename__ = "admin" 150 id = db.Column(db.Integer, primary_key=True) # 編號 151 name = db.Column(db.String(100), unique=True) # 管理員賬號 152 pwd = db.Column(db.String(100)) # 管理員密碼 153 is_super = db.Column(db.SmallInteger) # 是否為超級管理員,0為超級管理員 154 role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所屬角色 155 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間 156 adminlogs = db.relationship("Adminlog", backref='admin') # 管理員登錄日志外鍵關系關聯 157 oplogs = db.relationship("Oplog", backref='admin') # 管理員操作日志外鍵關系關聯 158 159 def __repr__(self): 160 return "<Admin %r>" % self.name 161 162 def check_pwd(self, pwd): 163 from werkzeug.security import check_password_hash 164 return check_password_hash(self.pwd, pwd) 165 166 167 # 管理員登錄日志 168 class Adminlog(db.Model): 169 __tablename__ = "adminlog" 170 id = db.Column(db.Integer, primary_key=True) # 編號 171 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所屬管理員 172 ip = db.Column(db.String(100)) # 登錄IP 173 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登錄時間 174 175 def __repr__(self): 176 return "<Adminlog %r>" % self.id 177 178 179 # 操作日志 180 class Oplog(db.Model): 181 __tablename__ = "oplog" 182 id = db.Column(db.Integer, primary_key=True) # 編號 183 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所屬管理員 184 ip = db.Column(db.String(100)) # 登錄IP 185 reason = db.Column(db.String(600)) # 操作原因 186 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登錄時間 187 188 def __repr__(self): 189 return "<Oplog %r>" % self.id 190 191 192 if __name__ == "__main__": 193 db.create_all() # 根據以上數據模型,逆向生成數據庫表
以上代碼中定義了工程涉及到一些表結構信息,最后定義了一個main方法,用於根據數據模型來逆向生成數據庫表。
(值得注意的是,這個main方法的名稱不能寫錯,比如筆者就不小心將"main"拼寫成了"mail"而導致運行的時候,數據表沒有生成,運行也不報錯)
五、逆向生成數據表
在PyCharm的命令行窗口中執行"python app/models.py"命令來運行main方法:
查看mysql數據庫,數據表成功生成:
檢查下表結構也沒有問題:
(結束)