记录一下学习flask web框架并且使用mysql的过程 在flask里使用mysql需要用的库是flask_sqlalchemy,因为我是做前端的 所以就不用他的模板引擎了 就只练习一下接口
首先安装好mysql 并且创建一个music数据库
创建一个music.py 引入需要的东西
flask_cors 可以运行跨域请求
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify,request
from flask_cors import *
创建flask实列
定义mysql的信息
app = Flask(__name__)
url = "127.0.0.1:3306"
user='root'
psw = '567984'
database = 'music'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{}:{}@{}/{}'.format(user,psw,url,database)
# 格式化字符串
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
练习一下
假设有一个歌单 歌单内容肯定有歌曲和歌手 就建两个表 一个存放歌曲 一个存放歌手
那么有些歌曲是某个歌手的作品,所以都是有关联的
定义模型
singers 和songs表
class Singer(db.Model): #继承db.model
__tablename__ = 'singers' #定义表名
id = db.Column(db.Integer, primary_key=True) # primary_key 主键 生成自增的id Integer整形
name = db.Column(db.String(16), unique=True) # #创建歌手的字段 unique 不能重复
def __init__(self, name,):
self.name = name
def __repr__(self):
return '<Singer %s>' % self.name #调用的时候方便打印查看
def to_json(self): # 格式化一下 返回给前端
if self.belong_to is not None:
data = []
for k in self.belong_to:
data.append({'song_id': k.id, 'song_name': k.name})
return {
'id': self.id,
'name': self.name,
'songs': data
}
class Song(db.Model):
__tablename__ = 'songs' #定义表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(16)) #创建歌曲的字段
singer_id = db.Column(db.Integer, db.ForeignKey('singers.id')) #ForeignKey 关联外键 参数为 表名.字段
belong_to = db.relationship('Singer', backref='belong_to', uselist=False)
'''
Relationship
第一个参数填写类名 也就是Singer类 表示了歌曲就和歌手存在关系
第二个参数backref,将向Singer类中添加一个belong_to的字段,(实际上在数据库里是没有的),反向引用。可以在这个字段里获取到Song的模型对象,uselist 参数忘记了
'''
def __init__(self, name, singer_id):
self.name = name
self.singer_id = singer_id
def __repr__(self):
return '<Song %s>' % self.name
两个表已经建立好 接下来在flask里运行一下 我这里随便加了一些数据
if __name__ == "__main__":
db.drop_all() #先删除一下表在创建
db.create_all()
singer1 = Singer('薛之谦')
'''
db.session.add(singer1)
db.session.commit()
单个添加
'''
singer2 = Singer('华晨宇')
singer3 = Singer('周杰伦')
db.session.add_all([singer1,singer2,singer3])
db.session.commit()
data1 = Song('一荤一素',singer1.id)
data2 = Song('告白气球',singer3.id)
data3 = Song('好想爱这个世界啊',singer2.id)
data4 = Song('烟火里的尘埃',singer2.id)
db.session.add_all([data1,data2,data3,data4])
db.session.commit()
app.run(debug=True)