1. 程式人生 > >使用falsk快速搭建自己的本地倉庫

使用falsk快速搭建自己的本地倉庫

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()