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