python Flask 操作数据库(2)
单表操作
数据准备
from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo" SQLALCHEMY_TRACK_MODIFICATIONS = False app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) # 模型类 -》对一个表设计 class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64)) age = db.Column(db.Integer) @app.route("/", methods=["GET", "POST"]) def index(): return "成功!" if __name__ == '__main__': db.create_all() app.run()
添加记录
user = User(name="laowang", age=18) db.session.add(user) # 逻辑添加 db.session.commit()
删除记录
# res = User.query.filter_by(name="laowang").first() # db.session.delete(res) # db.session.commit()
修改记录
res = User.query.filter_by(id=3).first() res.name="老色批" db.session.commit()
查询记录
SQLAlchemy中关于查询分为两部分:一个是查询过滤器,一个是查询执行器。
常用的SQLAlchemy查询过滤器
过滤器 | 说明 |
---|---|
filter() | 把过滤器添加到原查询上,返回一个新查询 |
filter_by() | 把等值过滤器添加到原查询上,返回一个新查询 |
limit | 使用指定的值限定原查询返回的结果 |
offset() | 偏移原查询返回的结果,返回一个新查询 |
order_by() | 根据指定条件对原查询结果进行排序,返回一个新查询 |
group_by() | 根据指定条件对原查询结果进行分组,返回一个新查询 |
常用的SQLAlchemy查询执行器
方法 | 说明 |
---|---|
all() | 以列表形式返回查询的所有结果 |
first() | 返回查询的第一个结果,如果未查到,返回None |
first_or_404() | 返回查询的第一个结果,如果未查到,返回404 |
get() | 返回指定主键对应的行,如不存在,返回None |
get_or_404() | 返回指定主键对应的行,如不存在,返回404 |
count() | 返回查询结果的数量 |
paginate() | 返回一个Paginate对象,它包含指定范围内的结果 |
演示
@app.route("/select_book") def select_book(): # 1.查询所有用户数据 # res = Books.query.all() # 说明:因为这里不想条件筛选,所以不需要查询过滤器 # # # 2.查询有多少个用户 # res = Books.query.count() # 3.查询第1个用户 res = Books.query.first() # # # 4.查询id为4的用户[3种方式] # res = Books.query.get(1) # 使用这种方式,后面只需要填写id值 # res = Books.query.filter_by(id=4).first() res = Books.query.filter(Books.id == 1).first() """ filter_by和filter的区别 格式: filter_by: 属性= filter: 对象.属性== 功能: filter功能上更加强大,可以实现更多的查询方式,比如比较运算符 """ print(res) return "查询成功"
一对多表操作
代码准备:
from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo" 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)) def _str_(self): # print显示内容做设置 return self.name def _repr__(self): # 对列表中显示内容做设置 return self.name class Book(db.Model): id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(64)) price =db.Column(db.Integer) pub_id = db.Column(db.Integer, db.ForeignKey("publishers.id") ) def _str_(self): # print显示内容做设置 return self.title def _repr__(self): # 对列表中显示内容做设置 return self.title @app.route('/',methods=["GET","POST"]) def hello_world(): return "成功" if __name__ == '__main__': db.create_all() app.run()
添加数据
books=Book(id=1,title="养鬼为祸",price=50,pub_id=1) db.session.add(books) # 逻辑添加 db.session.commit()
删除数据
es = Book.query.filter(Book.id == 1).first()
db.session.delete(es)
db.session.commit()
修改数据
es =Book.query.filter_by(id=1).first() es.title="西游记" db.session.commit()
查找数据
es =Publishers.query.filter(Publishers.name == "南方出版社").first() ls = Book.query.filter(Book.pub_id == es.id).all() print(ls)
没毛病!
欢迎转载,但请写明出处,谢谢。