单表
from flask_sqlalchemy import SQLAlchemy
class Config:
DEBUG=True
SQLALCHEMY_DATABASE_URI="mysql://root:123456@127.0.0.1:3306/demo3"
SQLALCHEMY_TRACK_MODIFICATIONS = False
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
#模型类-对表设计
class Publishers(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64))
address = db.Column(db.String(64))
@app.route("/")
def index():
#增
# res = Book(title = "玛卡巴卡",price = 12)
# res_1 = Publishers(name = "菜鸟出版",address = "家里蹲")
# db.session.add(res)
# db.session.commit()
return "ok"
if __name__ == '__main__':
db.create_all()
#db.drop_all()删除当前库内所有的表
app.run(debug=True)`
config那里对MySQL配置进行启动的前提,SQLALCHEMY_DATABASE_URI与SQLALCHEMY_TRACK_MODIFICATIONS 没有配置,只是进行简单的flask——hello world输出,它确实能输出到127.0.01,只是404Can’t find。而且开启debug的时候,下面就会出现 这两个报错类似的提醒。此时就需要去配置了。
ctrl+The left mouse button(鼠标左键)查看SQLAlchemy源码,就会有提示有
app = Flask(name)
db = SQLAlchemy(app)
直接就可以代入代码之中。至于
app.config.from_object(Config)为什么要在
db = SQLAlchemy(app)之后写,是为了解决在代码运行之间把配置类给db先配置上,因为代码有从上至下的执行的顺序。所以得在中间配置。
- 模型类 ,就是对表的设计,也可以说是在库里边创建一个空白表:
至于怎么设计(创建)表就需要sql语句创建它的结构; - 操作表 ,打开它的路由在里边进行增删改查的sql命令的操作。
例如:
`#增
# res = Book(title = "玛卡巴卡",price = 12, pub_id = 1)
# res_1 = Publishers(name = "菜鸟出版",address = "家里蹲")
# db.session.add(res)
# db.session.add(res_1)
# db.session.commit()`
改查删;后面就需要根据不同的情况去对下面代码进行操作
# res = Book.query.filter(Publishers.name == "菜鸟出版")
一对多
练习完“增删改查”,四个步骤之后就可以开始深一步的学习
#查找出版对应的书籍
# res = Book.query.filter(Publishers.name == "菜鸟出版").first()
# shu = Book.query.filter(Book.pub_id == res.pub_id).all()
# print(shu)
# ers = Book.query.filter(Book.title == "玛卡巴卡").first().to_Publish
# print(ers)
一对多:多的一方创建外键,这样可以加快速度上的提升,query.filter()写出你想要查询的东西,再根据它们之间外键的联系进行查询、修改。
如果想要快速查找出需要的数据。可以在第一要查询的(类/表)后面
to_book = db.relationship("Book", backref = "to_Publish")
relationship的快速查找。后面backref,进行对数据的方向查询`## 合理的创建标题,有助于目录的生成
多对多
在多对多关系中,为了更好的查询、搜索。创建第三方表进行表的联查
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:数据库密码@127.0.0.1:3306/数据库库名"
SQLALCHEMY_TRACK_MODIFICATIONS = False
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
# 图书表
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64), nullable=False)
price = db.Column(db.Integer)
pub_id = db.Column(db.Integer, db.ForeignKey("publisher.id"))
# to_pub = db.relationship("Publisher")
authors = db.relationship("Author", secondary="author__book", backref="books")
def __repr__(self):
return "图书名:%s|价格为%s" % (self.title, self.price)
# 出版社表
class Publisher(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), nullable=False)
address = db.Column(db.String(64), nullable=False)
to_books = db.relationship("Book", backref="to_pub")
# 作者表
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), nullable=False)
age = db.Column(db.Integer)
class Author_Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
author_id = db.Column(db.Integer, db.ForeignKey("author.id"))
book_id = db.Column(db.Integer, db.ForeignKey("book.id"))
@app.route("/", methods=["GET", "POST"])
def index():
# 查询南方出版社出版的所有书籍
# res = Publisher.query.filter_by(name="南方出版社").first().to_books
# res = Book.query.filter(Book.pub_id == pub.id).all()
# 查询渣男日记的出版社名
# book = Book.query.filter_by(title="渣男日记").first()
# res = Publisher.query.filter_by(id=book.pub_id).
# res = Book.query.filter_by(title="渣男日记").first().to_pub
# print(res)
# 增加
# new_obj = Author_Book()
# new_obj.author_id = Author.query.filter_by(name="小黑").first().id
# new_obj.book_id = Book.query.filter_by(title="渣男日记").first().id
#
# new_obj1 = Author_Book()
# new_obj1.author_id = Author.query.filter_by(name="小川").first().id
# new_obj1.book_id = Book.query.filter_by(title="渣男日记").first().id
#
# db.session.add(new_obj)
# db.session.add(new_obj1)
# db.session.commit()
# res = Book.query.filter_by(title="渣男日记").first().authors
# print(res)
# new_book = Book()
# new_book.title = "20人工日记"
# new_book.price = 999
# new_book.pub_id = 1
# new_book.authors = Author.query.all()
# db.session.add(new_book)
# db.session.commit()
#查询渣男日记的所有作者
# book = Book.query.filter_by(title="渣男日记").first()
# book.authors = Author.query.all()
# db.session.commit()
# book = Book.query.filter_by(title="金瓶梅").first()
# book.authors = Author.query.filter_by(name="小黑").first() # 错误,必须是列表
# db.session.commit()
#增
# new_book = Book()
# new_book.title = "20人工日记2"
# new_book.price = 888
# new_book.pub_id = 1
# new_book.authors = [Author(name="老五", age=20), Author(name="老liu", age=20)]
# db.session.add(new_book)
# db.session.commit()
# book = Book.query.filter_by(title="20人工日记2").first()
# db.session.delete(book)
# db.session.commit()
res = Author.query.filter_by(name="小黑").first().books
print(res)
return "成功!"
if __name__ == '__main__':
db.create_all()
app.run()