flask個人筆記
阿新 • • 發佈:2017-11-29
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個人筆記