欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【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.命令行法:

进入虚拟环境-->检测是否已经安装--->安装:

 

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

 

 

 方法2:在Pycharm中安装

 

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

 

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

 

以上准备工作做好了,就可以正式开始了:

先进入mysql,建立一个名为movie的数据库(不知道如何建立?那就先学完MYSQL的相关知识):

create database moive

再查询一下是否建立成功:

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

 

2.数据模型设计

以“会员”为例(附完整代码):

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

 

完整代码(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()