标签:对象 不能 www foreign pip turn 1.3 content flask
1 flaskORM模型
1.1 pip install flask_sqlalchemy
1.2 flask_sqlachemy配置
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 就可以访问全部内容
标签:对象 不能 www foreign pip turn 1.3 content flask
原文地址:http://www.cnblogs.com/fuzzier/p/7912772.html