【Flask学习笔记】数据模型设计
程序员文章站
2024-03-31 08:49:58
【前言】对于像我一样的新手来说,我觉得此环节难点主要是相关依赖包的安装和Flask-SQLAlchemy的使用,下面将一一讲解: 所谓数据模型,百度的解释是:“数据模型(Data Model)是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象。数据模型从抽象层 ......
【前言】对于像我一样的新手来说,我觉得此环节难点主要是相关依赖包的安装和Flask-SQLAlchemy的使用,下面将一一讲解:
所谓数据模型,百度的解释是:“数据模型(Data Model)是数据特征的抽象。(Data)是描述事物的符号记录,(Model)是现实世界的抽象。数据模型从抽象层次上描述了的静态特征、动态行为和,为的信息表示与操作提供了一个抽象的框架。数据模型所描述的内容有三部分:、和数据约束。”
这个解释还算通俗易懂,笔者就不再翻译了。
数据模型的建立过程相对简单,主要分为三步:
1.SQLAlchemy对象初始化
【参考资料】
2.创建表
此过程只不过是SQL语句的堆积,如果SQL语句没学好,建议自行补课。
3.设置模型的执行入口
一个函数:
if __name__ == "__main__":
db.create_all()
下面详细介绍:
安装sqlalchemy的两种方法:
1.命令行法:
进入虚拟环境-->检测是否已经安装--->安装:
方法2:在Pycharm中安装
以上准备工作做好了,就可以正式开始了:
先进入mysql,建立一个名为movie的数据库(不知道如何建立?那就先学完MYSQL的相关知识):
create database moive
再查询一下是否建立成功:
2.数据模型设计
以“会员”为例(附完整代码):
完整代码(app/models.py):
1 # coding=utf-8 2 from flask import Flask 3 from flask_sqlalchemy import SQLAlchemy 4 from datetime import datetime 5 import pymysql 6 app = Flask(__name__) 7 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:admin@127.0.0.1:3306/moive' 8 #app.config['SQLALCHEMY_BINDS'] = 'mysql+pymysql://root:980514@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.utcnow) 25 uuid = db.Column(db.String(255), unique=True) 26 userlogs = db.relationship('Userlog', backref='user') 27 comments = db.relationship('Comment', backref='user') 28 moivecols = db.relationship('Moivecol', backref='user') 29 30 def __repr__(self): 31 return "<User %r>" % self.name 32 33 34 # 会员登录日志 35 class Userlog(db.Model): 36 __tablename__ = "userlog" 37 id = db.Column(db.Integer, primary_key=True) 38 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 39 ip = db.Column(db.String(100)) 40 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 41 42 def __repr__(self): 43 return "<Userlog %r>" % self.user_id 44 45 46 # 标签 47 class Tag(db.Model): 48 __tablename__ = "tag" 49 id = db.Column(db.Integer, primary_key=True) 50 name = db.Column(db.String(100), unique=True) 51 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 52 movies = db.relationship('Moive', backref='tag') 53 54 def __repr__(self): 55 return "<Tag %r>" % self.name 56 57 58 # 电影 59 class Moive(db.Model): 60 __tablename__ = "moive" 61 id = db.Column(db.Integer, primary_key=True) 62 title = db.Column(db.String(255), unique=True) 63 url = db.Column(db.String(255), unique=True) 64 info = db.Column(db.Text) 65 logo = db.Column(db.String(255), unique=True) 66 star = db.Column(db.SmallInteger) 67 playnum = db.Column(db.BigInteger) 68 commentnum = db.Column(db.BigInteger) 69 tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) 70 area = db.Column(db.String(255)) 71 release_time = db.Column(db.Date) 72 length = db.Column(db.String(255)) 73 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 74 comments = db.relationship('Comment', backref='moive') 75 moivecols = db.relationship('Moivecol', backref='moive') 76 77 def __repr__(self): 78 return "<Moive %r>" % self.title 79 80 81 # 上映预告 82 class Preview(db.Model): 83 __tablename__ = "preview" 84 id = db.Column(db.Integer, primary_key=True) 85 title = db.Column(db.String(255), unique=True) 86 logo = db.Column(db.String(255), unique=True) 87 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 88 89 def __repr__(self): 90 return "<Preview %r>" % self.title 91 92 93 # 评论 94 class Comment(db.Model): 95 __tablename__ = "comment" 96 id = db.Column(db.Integer, primary_key=True) 97 content = db.Column(db.Text) 98 moive_id = db.Column(db.Integer, db.ForeignKey('moive.id')) 99 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 100 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 101 102 def __repr__(self): 103 return "<Comment %r>" % self.id 104 105 106 # 电影收藏 107 class Moivecol(db.Model): 108 __tablename__ = "moivecol" 109 id = db.Column(db.Integer, primary_key=True) 110 moive_id = db.Column(db.Integer, db.ForeignKey('moive.id')) 111 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 112 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 113 114 def __repr__(self): 115 return "<Moivecol %r>" % self.id 116 117 118 # 权限 119 class Auth(db.Model): 120 __tablename__ = "auth" 121 id = db.Column(db.Integer, primary_key=True) 122 name = db.Column(db.String(100), unique=True) 123 url = db.Column(db.String(255), unique=True) 124 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 125 126 def __repr__(self): 127 return "<Auth %r>" % self.name 128 129 130 # 角色 131 class Role(db.Model): 132 __tablename__ = "role" 133 id = db.Column(db.Integer, primary_key=True) 134 name = db.Column(db.String(100), unique=True) 135 auths = db.Column(db.String(600)) 136 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 137 138 def __repr__(self): 139 return "<Role %r>" % self.name 140 141 142 # 管理员 143 class Admin(db.Model): 144 __tablename__ = "admin" 145 id = db.Column(db.Integer, primary_key=True) 146 name = db.Column(db.String(100), unique=True) 147 pwd = db.Column(db.String(100)) 148 is_super = db.Column(db.SmallInteger) 149 role_id = db.Column(db.Integer, db.ForeignKey('role.id')) 150 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 151 adminlogs = db.relationship("Adminlog", backref='admin') 152 oplogs = db.relationship("oplog", backref='admin') 153 154 def __repr__(self): 155 return "<Admin %r>" % self.name 156 157 158 # 管理员登录日志 159 class Adminlog(db.Model): 160 __tablename__ = "adminlog" 161 id = db.Column(db.Integer, primary_key=True) 162 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) 163 ip = db.Column(db.String(100)) 164 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 165 166 def __repr__(self): 167 return "<Adminlog %r>" % self.id 168 169 170 # 管理员操作日志 171 class Oplog(db.Model): 172 __tabelname__ = "oplog" 173 id = db.Column(db.Integer, primary_key=True) 174 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) 175 ip = db.Column(db.String(100)) 176 reason = db.Column(db.String(600)) 177 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) 178 179 def __repr__(self): 180 return "<Oplog %r>" % self.id 181 182 183 if __name__ == "__main__": 184 db.create_all()