1. 程式人生 > >flask個人筆記

flask個人筆記

mit 定義 clas 4.4 返回 設置 ati 列表 cal

1 flaskORM模型

1.1 pip install flask_sqlalchemy

1.2 flask_sqlachemy配置

  • MySQL - mysql://username:password@hostname/database
  • Postgre - postgresql://username:password@hostname/database
  • SQLite - sqlite:////absolute/path/to/database
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__
) app.config[SQLALCHEMY_DATABASE_URI] = mysql://root:wt322426@localhost/infomation?charset=utf8 db = SQLAlchemy(app)

1.3 flask創建ORM模型

1.3.1 模型需要繼承 db.Model , 需要映射到列表中的屬性,必須寫成 db.Column 的數據類型。

1.3.2 數據類型:

  db.Integer 代表整形

  db.String 代表varchar, 需要指定最長長度

  db.DateTime 代表時間日期類型,對應於Python的datetime.datetime

1.3.3 數據類型的參數:

  primary_key=True 代表設置這個字段為主鍵

  autoincrement=True 代表這個字段是自增的

  unique=True 代表這個字段是唯一的

  nullable=False 代表這個字段是不可為空的

class Info(db.Model):
    __tablename__ = info
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), unique=True)
    content 
= db.Column(db.String(500))

1.3.4 創建和刪除表

db.create_all()  # 創建所有表
db.drop_all()  # 刪除所有表

1.4 flaskORM增刪改查

1.4.1 增

info = Info(title=new title, content=i have a new idea)
db.session.add(info)
db.session.commit()  # 事物提交

1.4.2 查

info_obj = Info.query.filter_by(id=1).first()  # 返回Info的對象
print info_obj.title  # 打印出new title

1.4.3 改

info_obj = Info.query.filter_by(id=1).first()  # 先將對象取出
info_obj.title = changed title  # 將對象進行更改
db.session.commt()  # 事物提交

1.4.4 刪

info_obj = Info.query.filter_by(id=1).first()  # 先將對象取出
db.session.delete(info_obj)
db.session.commit()

1.5 flaskORM外鍵約束

1.5.1 外鍵約束

class People(db.Model):
    __tablename__ = people
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), unique=True)
    info_id = db.Column(db.Integer, db.ForeignKey(info.id))
    # 給People這個模型添加一個all_info屬性,可以訪問這個人物所有的info
    # backref 是定義反向引用,可以通過 info_obj.peoples 訪問這個模型所寫的所有info
    peoples_attr = db.relationship(Info, backref=db.backref(peoples))

    def __str__(self):
        return %s, %s %s % (self.id, self.username, self.infoid)


class Info(db.Model):
    __tablename__ = info
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), unique=True)
    content = db.Column(db.String(500))

    def __str__(self):
        return %s, %s, %s % (self.id, self.title, self.content)


i1 = Info.query.filter_by(id=1).first()
for p in i1.peoples:
    print p.username


# out:
# www
# eee
# rrr

1.5.2 多對多外鍵建立

  設置中間表

  中間表,不能通過 class 創建, 要使用 db.Table 的方式創建

  設置關聯, infos = db.relationship(‘Info‘, secondary=people_info, backref=db.backref(‘peoples‘)

  其中 secondary 表示中間表, people_info是中間表名

  info_obj.peoples 就可以訪問全部內容

flask個人筆記