【Flask学习笔记】数据模型设计

【前言】对于像我一样的新手来说,我觉得此环节难点主要是相关依赖包的安装和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:[email protected]:3306/moive'
  8 #app.config['SQLALCHEMY_BINDS'] = 'mysql+pymysql://root:[email protected]: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()

猜你喜欢

转载自www.cnblogs.com/peterzone/p/9367919.html