一、创建数据库
在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数据库,数据表成功生成:
检查下表结构也没有问题:
(结束)