1.先导入相对应的库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb() app = Flask(__name__)
# 连接数据库
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:zengsf@localhost:3306/flask"
# 采用自动提交方式
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
db = SQLAlchemy(app)
2.先创建两个数据库类,例如创建LOL与DATA2这两个类
LOL与DOTA2表进行外键关联,DOTA2都有一个lol_id字段。
class LOL(db.Model):
# 创建表名为
__tablename__ = "lol"
# 创建字段
id = db.Column(db.Integer, primary_key=True)
lname = db.Column(db.String(30), nullable=False)
# 增加关联属性以及反向引用属性
data = db.relationship("DOTA2", backref = "lol", uselist=False) def __init__(self, lname):
self.lname = lname def __repr__(self):
return "<LOL:%r>" % self.lname
class DOTA2(db.Model):
__tablename__ = "dota2"
id = db.Column(db.Integer, primary_key=True)
dname = db.Column(db.String(30))
# 增加一个列(外键):表示引用自LOL表的外键
lol_id = db.Column(db.Integer, db.ForeignKey("lol.id")) def __init__(self, dname):
self.dname = dname def __repr__(self):
return "<DOTA2:%r>" % self.dname
3.上面这些还没有完成创建数据库,还需要有数据库的创建
db.create_all()
4.接着先往两张表里添加数据,在浏览器中运行指定的路径就可以添加数据。
@app.route('/lol')
def lol_view():
loldata = LOL("小炮")
db.session.add(loldata)
print(db.session.query(LOL).all())
return "OK" @app.route("/dota2")
def dota2_view():
dota2data = DOTA2("狙击手")
lol = db.session.query(LOL).filter(LOL.id==1).first()
dota2data.lol_id = lol.id
db.session.add(dota2data)
print(db.session.query(DOTA2).all())
return "OK"
5.数据添加成功之后,可以通过正向引用或者反向引用来获取到相对应的名字
@app.route('/query')
def query_view():
# 正向引用,通过LOL表进行查询,获取对象,在利用对象调用关联属性得到DOTA2表关联的对象,在获取里面的值。
# lol = LOL.query.filter_by(id=1).first()
# data = lol.data # 反向引用,通过DOTA2表进行查询,获取对象,在利用对象调用反向引用属性获取到LOL表关联对象,获取里面的值
dota2 = DOTA2.query.filter_by(id=1).first()
data = dota2.lol return "lol:%s,dota2:%s" % (data.lname, dota2.dname)
6.由于代码是从上一直往下写的,最后别忘了调用
if __name__ == '__main__':
app.run(debug=True)
7.在浏览器中输出结果是:
lol:小炮,dota2:狙击手