复制代码

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)

没毛病!

欢迎转载,但请写明出处,谢谢。

posted @ 2022-05-11 10:16  怪~咖  阅读(85)  评论(0编辑  收藏  举报
复制代码