Python Flask音乐网:数据库设计
目录
创建数据库
create database music default character set utf8;
数据表模型
user表
存储用户的信息
song表
存储歌曲的信息
arttist表
存储歌手的信息
collect表
存储收藏表的信息
创建模型
安装第三方库
pip install
Flask==0.12.2 flask_script==2.0.6 Flask-SQLAlchemy==2.3.2 PyMySQL==0.8.0 SQLAlchemy==1.2.4 Werkzeug==0.14.1
配置
from flask import Flask from flask_script import Manager from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 创建一个Flask app对象 # 数据库链接的配置,此项必须,格式为(数据库+驱动://用户名:密码@数据库主机地址:端口/数据库名称) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:000000@localhost:3306/music' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 跟踪对象的修改,在本例中用不到调高运行效率,所以设置为False db = SQLAlchemy(app=app) # 为哪个Flask app对象创建SQLAlchemy对象,赋值为db manager = Manager(app=app) # 初始化manager模块 @app.route('/') def hello_world(): reutrn 'Hello World!' if __name__ == '__main__': manager.run() # 运行服务器
py -3.7 manager.py runserver
Flask-Script的作用
Flask的Web开发服务器支持很多启动设置选项,但只能在脚本中作为参数传给app.run()函数。
这种方式很不方便,传递设置选项的理想方式是使用命令行参数。
Flask-Script就是这么一个Flask扩展工具,为Flask程序添加一个命令行解析器。
简单地说,Flask-Script的作用就是可以通过命令行的形式来操作Flask。如,通过命令行跑一个开发版本的服务器、设置数据库等。
参考文档:https://zhuanlan.zhihu.com/p/269820011
声明模型
这里的模型就的我们口中通常说的MTV中Model,显然app.py 中用@app.route()装饰器装饰的就是View了,Templates中存在的html模板文件就的我们的T了。
这里简单的写一个Model
app/models.py:
from manager import db # 导入manager文件中的SQLAlchemy对象 # class Student(db.Model): # 继承SQLAlchemy.Model对象,一个对象代表了一张表 # s_id= db.Column(db.Integer, primary_key=True, autoincrement=True, unique=True) # id 整型,主键,自增,唯一 # s_name = db.Column(db.String(20)) # 名字 字符串长度为20 # s_age = db.Column(db.Integer, default=20) # 年龄 整型,默认为20 # __tablename__ = 'student' # 该参数可选,不设置会默认的设置表名,如果设置会覆盖默认的表名 # def __init__(self, name, age): # 初始化方法,可以对对象进行创建 # self.s_name = name # self.s_age = age # def __repr__(self): # 输出方法,与__str__类似,但是能够重现它所代表的对象 # return '<Student %r, %r, %r>' % (self.s_id, self.s_name, self.sage) # 用户表 class User(db.Model): __tablename__ = "user" id = db.Column(db.Integer, primary_key=True) # 编号 username = db.Column(db.String(100)) # 用户名 pwd = db.Column(db.String(100)) # 密码 flag = db.Column(db.Boolean,default=0) # 用户标识,0:普通用户 1:管理员 def __repr__(self): return '<User %r>' % self.name def check_pwd(self, pwd): """ 检测密码是否正确 :param pwd: 密码 :return: 返回布尔值 """ from werkzeug.security import check_password_hash return check_password_hash(self.pwd, pwd) # 歌手表 class Artist(db.Model): __tablename__ = 'artist' id = db.Column(db.Integer, primary_key=True) # 编号 artistName = db.Column(db.String(100)) # 歌手名 style = db.Column(db.Integer) # 歌手类型 imgURL = db.Column(db.String(100)) # 头像 isHot = db.Column(db.Boolean,default=0) # 是否热门 # 歌曲表 class Song(db.Model): __tablename__ = 'song' id = db.Column(db.Integer, primary_key=True) # 编号 songName = db.Column(db.String(100)) # 歌曲名称 singer = db.Column(db.String(100)) # 歌手名称 fileURL = db.Column(db.String(100)) # 歌曲图片 hits = db.Column(db.Integer,default=0) # 点击量 style = db.Column(db.Integer) # 歌曲类型 0:全部 1:华语 2:欧美 3:日语 4:韩语 5 其他 collect = db.relationship('Collect', backref='song') # 收藏外键关系关联 # 歌曲收藏 class Collect(db.Model): __tablename__ = "collect" id = db.Column(db.Integer, primary_key=True) # 编号 song_id = db.Column(db.Integer, db.ForeignKey('song.id')) # 所属歌曲 user_id = db.Column(db.Integer) # 所属用户
在python7 交互式条件下输入:
>>> from manager import db
>>> from models import *
>>> db.create_all()
数据表即建立起来,
mysqL 后台验证:
mysql> use music;
Database changed
mysql> show tables;
+-----------------+ | Tables_in_music | +-----------------+ | artist | | collect | | song | | student | | user | +-----------------+ 5 rows in set (0.00 sec)
参考文档:
[1] flask三、Flask-SQLAlchemy 的使用 : https://www.jianshu.com/p/8c038f0134f8
[2] Flask-SQLAlchemy详解 https://www.jianshu.com/p/f7ba338016b8