flask之資料庫(2)
阿新 • • 發佈:2022-05-10
單表操作
增
@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 "查詢成功"