(3)PyCharm中Flask工程逆向生成数据库表

 一、创建数据库

在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数据库,数据表成功生成:

 

检查下表结构也没有问题:

 

(结束)

 

posted @ 2019-06-19 22:41  xuebusi  阅读(1356)  评论(0编辑  收藏  举报