1. 程式人生 > 其它 >flask之資料庫(2)

flask之資料庫(2)

單表操作

@app.route("/add_book")
def add_book():
    ro1 = Books(name='三國演義')#增加Books中name為三國演義的資料
    db.session.add(ro1)#增加
    db.session.commit()#提交
    return "新增成功"

@app.route("/del_book")
def del_book():
    rol = Books.query.filter_by(name="水滸傳").first()#刪除Books中name為水滸傳的資料,其中query固定寫法,first第一個
db.session.delete(rol)#刪除 db.session.commit()#提交 return "刪除成功"

@app.route("/alter_book")
def alter_book():
    rol = Books.query.filter_by(name="三國演義").first()#與刪除大致相同
    rol.name = "射鵰英雄傳"#更改內容
    db.session.commit()#提交
    return "修改成功"

SQLAlchemy中關於查詢分為兩部分:一個是查詢過濾器,一個是查詢執行器。

過濾器

過濾器 說明
filter() 把過濾器新增到原查詢上,返回一個新查詢
filter_by() 把等值過濾器新增到原查詢上,返回一個新查詢
limit 使用指定的值限定原查詢返回的結果
offset() 偏移原查詢返回的結果,返回一個新查詢
order_by() 根據指定條件對原查詢結果進行排序,返回一個新查詢
group_by() 根據指定條件對原查詢結果進行分組,返回一個新查詢

執行器

方法 說明
all() 以列表形式返回查詢的所有結果
first() 返回查詢的第一個結果,如果未查到,返回None
first_or_404() 返回查詢的第一個結果,如果未查到,返回404
get() 返回指定主鍵對應的行,如不存在,返回None
get_or_404() 返回指定主鍵對應的行,如不存在,返回404
count() 返回查詢結果的數量
paginate() 返回一個Paginate物件,它包含指定範圍內的結果

一對多表

在多的一方建立一個欄位指向另一個表中的唯一標識(id),外來鍵

增刪與單表操作大致相同

查詢資料

@app.route("/select_book")
def select_book():
    # 目標:查詢南方出版社出版的書籍
    res = Publishers.query.filter(Publishers.name == "南方出版社").first()
    rols = Books.query.filter(Books.publish_id == res.id).all()
    print(rols)
    return "查詢成功"

簡:在表中設定欄位時新增一個內容(紅色),操作方法變簡

class Publishers(db.Model):
    __tablename__ = 'publishers'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    city = db.Column(db.String(64))
    to_book = db.relationship("Books")

    def __repr__(self):
        return 'User:%s' % self.name

@app.route("/select_book")
def select_book():
    # 目標:查詢南方出版社出版的書籍
    res = Publishers.query.filter(Publishers.name == "南方出版社").first().to_book
    print(res)
    return "查詢成功"