(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數據庫,數據表成功生成:

 

檢查下表結構也沒有問題:

 

(結束)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM