使用falsk快速搭建自己的本地倉庫
阿新 • • 發佈:2018-12-08
1.建立模型
class MODLENAME(db.Model):
__tablename__=TABLENAME
COLUMN_NAME=db.Column(db.TYPE,OPTIONS)
MODELNAME : 模型名稱 TABLENAME : 對應的表名 COLUMN_NAME : 對應的列名 TYPE : 列型別 OPTIONS : 列選項 TYPE: Integer,SmallInteger,BigInteger,BooleanFloat,Numeric String,Text,Unicode,UnicodeText,Date,Time,DateTime OPTIONS: primary_key : True or False unique : True or False index : True or False nullable : True or False 預設是允許為空(True) default : 定義預設值
2.資料庫操作
1.插入 db.session.add(Models物件) db.session.commit() 自動提交: app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True 2.查詢 **1.基於 db.session 查詢** 1.db.session.query() 查詢基礎,返回查詢物件 2.查詢執行函式 目的:用於得到最終的結果 all() , first() , first_or_404() , count() 3.查詢過濾器函式 目的:在基礎查詢後增加篩選條件 1.filter() 注意:必須使用 實體類.屬性 做篩選 1.db.session.query(Models).filter(Models.column > num).all() 2.db.session.query(Models).filter(Models.col1>num1,Models.col2>num2) 3.db.session.query(Models).filter(or_(條件1,條件2)).all() 4.db.session.query(Models).filter(Models.column.like('%w%')).all() 5.db.session.query(Models).filter(Models.column.in_(['','',''])).all() 6.聚合 db.session.query(func.聚合函式(Models.Column).label('別名')) 聚合函式: sum() : 求和 count() : 求數量 max() min() avg() 2.filter_by() 3.limit() 4.order_by() 5.group_by() **2.基於Models進行查詢 Models.query.查詢過濾器**函式(條件引數).查詢執行函式() 3.刪除 1.查詢出要刪除的實體物件 u=db.session.query(Models).filter_by(xxx).first() 2.根據提供的 刪除方法進行刪除 db.session.delete(u) 注意: 真正的刪除並不是通過刪除操作完成,而是通過修改完成的 4.修改 1.查 將 要修改的資訊查詢出來 2.改 實體物件.屬性 = 值 3.儲存 db.session.add(實體物件)
建庫應用示例:
from flask import Flask, render_template, request, redirect from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_MySQLdb() app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:[email protected]:3306/flask" app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True db = SQLAlchemy(app) # db.init_app(app) class Course(db.Model): __tablename__ = "course" id = db.Column(db.Integer,primary_key=True) cname = db.Column(db.String(30)) #增加關聯屬性和反向引用關係 #關聯屬性:在course物件中通過哪個屬效能夠得到對應的所有的teacher #反向引用關係:在teacher物件中通過哪個屬效能找到它對應的course teachers = db.relationship('Teacher',backref='course',lazy="dynamic") def __init__(self,cname): self.cname = cname def __repr__(self): return "<Course:%r>" % self.cname class Teacher(db.Model): __tablename__ = 'teacher' id = db.Column(db.Integer,primary_key=True) tname = db.Column(db.String(30)) tage = db.Column(db.Integer) #增加一列:course_id,外來鍵列,引用自主鍵表(course)的主鍵列(id) course_id = db.Column(db.Integer,db.ForeignKey('course.id')) #增加關聯屬性以及反響引用屬性 wife = db.relationship('Wife',backref='teacher',uselist=False) def __repr__(self): return "<Teacher:%r>" % self.tname class Wife(db.Model): id=db.Column(db.Integer,primary_key=True) wname=db.Column(db.String(30)) wage=db.Column(db.Integer) #增加一個列(外來鍵):表示引用自Teacher表的主鍵 teacher_id = db.Column(db.Integer,db.ForeignKey('teacher.id')) def __init__(self,wname,wage): self.wname = wname self.wage = wage def __repr__(self): return "<Wife:%r>" % self.wname db.create_all()