1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库
在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库
create database movie 3.定义MaridDB数据库连接在app目录下的__init__.py文件中添加以下内容
from flask import Flask, render_template from flask_sqlalchemy import SQLAlchemy import pymysql # 实例化Flask类得到app对象 app = Flask(__name__) # 定义连接的数据库 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root1234@192.168.81.10:3306/movie" # 如果设置成True(默认情况),Flask-SQLAlchemy将会追踪对象的修改并且发送信号 # 这需要额外的内存,如果不必要的可以禁用 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 定义secret_key app.config['SECRET_KEY'] = "6bd749587aad49399f674b202a07d56f" db = SQLAlchemy(app) 4.定义数据模型类在app目录下创建models.py文件,文件内容为
# _*_coding:utf-8_*_ from datetime import datetime from app import db 4.1 定义会员数据模型 # 会员 class User(db.Model): __tablename__ = 'user' # 定义用户表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 用户编号 name = db.Column(db.String(100), unique=True) # 呢称 pwd = db.Column(db.String(100)) # 密码 email = db.Column(db.String(100), unique=True) # 邮箱 phone = db.Column(db.String(11), unique=True) # 用户手机号码 info = db.Column(db.Text) # 个性简介 face = db.Column(db.String(255), unique=True) # 头像 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 注册时间 uuid = db.Column(db.String(255), unique=True) # 唯一标识 userlogs = db.relationship("Userlog", backref='user') # 会员登录日志外键关系关联 comments = db.relationship('Comment', backref='user') # 评论外键关系关联 moviecols = db.relationship('Moviecol', backref='user') # 电影收藏外键关系关联 # 返回定义类型 def __repr__(self): return "<User %r>" % self.name # 检测密码,判断用户输入的密码是否与数据库中保存的用户的密码相同 def check_pwd(self,pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd,pwd) 4.2 定义会员登录日志数据模型 # 会员登录日志 class Userlog(db.Model): __tablename__ = 'userlog' # 定义用户日志表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属会员编号 ip = db.Column(db.String(100)) # 最近登录IP地址 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 最近登录时间 def __repr__(self): return "<Userlog %r>" % self.id 4.3 定义标签数据模型 # 电影标签 class Tag(db.Model): __tablename__ = 'tag' # 定义电影标签表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 电影编号 name = db.Column(db.String(100), unique=True) # 标题 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 电影添加时间 movies = db.relationship("Movie", backref='tag') # 电影外键的键值 def __repr__(self): return "<Tag %r>" % self.name 4.4 定义电影数据模型 # 电影 class Movie(db.Model): __tablename__ = 'movie' # 定义电影表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(255), unique=True) # 标题 url = db.Column(db.String(255), unique=True) # 地址 info = db.Column(db.Text) # 简介 logo = db.Column(db.String(255), unique=True) # 封面 star = db.Column(db.SmallInteger) # 星级 playnum = db.Column(db.BigInteger) # 播放量 commentnum = db.Column(db.BigInteger) # 评论量 tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 所属标签 area = db.Column(db.String(255)) # 上映地区 release_time = db.Column(db.Date) # 上映时间 length = db.Column(db.String(100)) # 播放时间 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 comments = db.relationship('Comment', backref='movie') # 评论外键关系关联 moviecols = db.relationship('Moviecol', backref='movie') # 收藏外键关系关联 def __repr__(self): return "<Movie %r>" % self.title 4.5 定义上映预告数据模型 # 上映预告 class Preview(db.Model): __tablename__ = 'preview' # 定义电影上映预告表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(255), unique=True) # 标题 logo = db.Column(db.String(255), unique=True) # 封面 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return "<Preview %r>" % self.title 4.6 定义电影评论数据模型 # 电影评论 class Comment(db.Model): __tablename__ = 'comment' # 定义电影评论表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 content = db.Column(db.Text) # 评论内容 movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return '<Comment %r>' % self.id 4.7 定义电影收藏数据模型 # 电影收藏 class Moviecol(db.Model): __tablename__ = 'moviecol' # 定义电影收藏表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 电影编号 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 用户编号 addtime = db.Column(db.DateTime, index=True, default=datetime) # 添加收藏时间 def __repr__(self): return "<Moviecol %r>" % self.id 4.8 定义权限数据模型 # 权限 class Auth(db.Model): __tablename__ = 'auth' # 定义用户权限表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 权限名称 url = db.Column(db.String(100), unique=True) # 地址 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return "<Auth %r>" % self.name 4.9 定义角色数据模型 # 角色 class Role(db.Model): __tablename__ = 'role' # 定义用户角色表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(128), unique=True) # 角色名称 auths = db.Column(db.String(512)) addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 admins = db.relationship("Admin", backref='role') # 管理员外键关系关联 def __repr__(self): return "<Role %r>" % self.name 4.10 定义管理员数据模型 # 管理员 class Admin(db.Model): __tablename__ = 'admin' # 定义管理员表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 管理员账号 pwd = db.Column(db.String(100)) # 管理员密码 is_super = db.Column(db.SmallInteger) # 是否为超级管理员,0为超级管理员 role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所属角色 addtime = db.Column(db.DateTime, index=True, default=datetime.now) adminlogs = db.relationship('Adminlog', backref='admin') # 管理员登录日志外键关系关联 oplogs = db.relationship('Oplog', backref='admin') # 管理员操作日志外键关系关联 def __repr__(self): return "<Admin %r>" % self.name def check_pwd(self, pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd, pwd) 4.11 定义管理员登录日志数据模型 # 管理员登录日志 class Adminlog(db.Model): __tablename__ = 'adminlog' # 定义管理员日志表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员 ip = db.Column(db.String(100)) # 登录IP addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间 def __repr__(self): return "<Adminlog %r>" % self.id 4.12 定义用户操作日志 # 操作日志 class Oplog(db.Model): __tablename__ = 'oplog' # 定义操作日志表在数据库中的名称 id = db.Column(db.Integer, primary_key=True) # 编号 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员 ip = db.Column(db.String(100)) # 登录IP reason = db.Column(db.String(600)) # 操作原因 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间 def __repr__(self): return "<Oplog %r>" % self.id在models.py文件保存所有的模型类
5. 创建数据库在models.py文件中,定义main函数,在MariaDB数据库中生成前面定义的模型表
if __name__ == '__main__': db.create_all()单独执行models.py文件,在MariaDB数据库的movie数据库中创建数据表
数据库创建完成,进入MariaDB数据库提示符,查看创建的数据表