码迷,mamicode.com
首页 > 其他好文 > 详细

flask个人笔记

时间:2017-11-29 00:18:17      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:对象   不能   www   foreign   pip   turn   1.3   content   flask   

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个人笔记

标签:对象   不能   www   foreign   pip   turn   1.3   content   flask   

原文地址:http://www.cnblogs.com/fuzzier/p/7912772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!