mkvirtualenv flask_demo -p python3
安装
- pip install flask==0.12.4
- # 导入 flask 程序
- from flask import Flask
- # 初始化 flask 对象
- App = Flask(__name__)
- # 装饰器模式, 新建路由, 绑定 index 视图函数
- @App.route("/index")
- def index():
- return "index page"
- # 判断当前的__name__ 是否是__main__
- # __name__ : 如果做为单一模块运行, 表示主模块名称:__main__
- # 如果做为模块导入, 那么就表示当前模块的名字
- if __name__ == '__main__':
- # 启动 App
- App.run()
运行之后, 在浏览器地址栏输入: http://127.0.0.1:5000/index
就可以看到视图函数返回的内容
Flask 数据库基本操作
在 Flask-SQLAlchemy 中, 插入, 修改, 删除操作, 均由数据库会话管理.
会话用 db.session 表示. 在准备把数据写入数据库前, 要先将数据添加到会话中然后调用 commit() 方法提交会话.
在 Flask-SQLAlchemy 中, 查询操作是通过 query 对象操作数据.
最基本的查询是返回表中所有数据, 可以通过过滤器进行更精确的数据库查询.
在视图函数中定义模型类
- from flask import Flask
- from flask_sqlalchemy import SQLAlchemy
- App = Flask(__name__)
- # 设置连接数据库的 URL
- App.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/test'
- App.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
- # 查询时会显示原始 SQL 语句
- App.config['SQLALCHEMY_ECHO'] = True
- db = SQLAlchemy(App)
- class Role(db.Model):
- # 定义表名
- __tablename__ = 'roles'
- # 定义列对象
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(64), unique=True)
- us = db.relationship('User', backref='role')
- #repr() 方法显示一个可读字符串
- def __repr__(self):
- return 'Role:%s'% self.name
- class User(db.Model):
- __tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(64), unique=True, index=True)
- email = db.Column(db.String(64),unique=True)
- password = db.Column(db.String(64))
- role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
- def __repr__(self):
- return 'User:%s'%self.name
- if __name__ == '__main__':
- App.run(debug=True)
- View Code
模型之前的关联
一对多
在一的那一方, 建立跟多的那一方的关联属性
- class Role(db.Model):
- ...
- #关键代码
- us = db.relationship('User', backref='role', lazy='dynamic')
- ...
- class User(db.Model):
- ...
- role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
- View Code
多对多
多对多是通过建立中间表实现的. 中间表值记录关系和存储关系字段.
这个中间表将互为多对多的关系表的主键设为外键.
这个关系表是直接建立的, 不适用于模型类映射
- registrations = db.Table('registrations',
- db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
- db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))
- )
- class Course(db.Model):
- ...
- class Student(db.Model):
- ...
- classes = db.relationship('Course',secondary=registrations,
- backref='student',
- lazy='dynamic')
- View Code
增删改查
增
- user = User(name = "lisi")
- db.session.add(user) # 将 user 添加到这个 TCP 会话当中, 这个 session 就代表这个链接会话
删
- user = User.query.get(1)
- db.session.delete(user)
- db.session.commit()
改
- user = User.query.get(1)
- user.name = "lisi"
- db.session.commit()
查
语法:
模型类名. query. 过滤器. 查询执? 行行器?
来源: http://www.bubuko.com/infodetail-3275875.html