1. Hello Flask 快速开始示例:
1 2 3 4 5 6 7 8 9 10 11 from flask import Flaskapp = Flask(__name__) @app.route('/' , methods=["get" ] ) def hello_world (): return 'Hello World!' if __name__ == '__main__' : app.run()
2. 使用数据库 2.1 使用flask_sqlalchemy连接和创建数据库内容 笔记:flask数据库之Flask-SQLAlchemy安装及配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyimport pymysqlpymysql.install_as_MySQLdb() app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI' ] = 'mysql://root:@localhost/flask_study' app.config['SQLALCHEMY_TRACK_MODIFICATIONS' ] = False db = SQLAlchemy(app) class Role (db.Model): __tablename__ = "roles" id = db.Column(db.Integer, primary_key=True ) name = db.Column(db.String(16 ), unique=True ) class User (db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True ) name = db.Column(db.String(16 ), unique=True ) role_id = db.Column(db.Integer, db.ForeignKey('roles.id' )) @app.route('/' ) def index (): return 'Hello flask!' if __name__ == '__main__' : db.drop_all() db.create_all() app.run(debug=True )
2.2 在shell中使用ipython修改数据 笔记:flask数据库之基本操作模型建立
注意:在ipython已经不支持python2,需要安装旧版本来获取对Python2的支持!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ pip install ipython==5.4.0 In [5]: user = User(name="heima", role_id=role.id) In [6]: db.session.add(user) In [7]: db.session.commit() In [8]: user.name = 'chengxuyuan' In [9]: db.session.commit() In [10]: db.session.delete(user) In [11]: db.session.commit()
2.3 创建关系引用 笔记:flask数据库之多对多模型演练
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 db = SQLAlchemy(app) class Role (db.Model): users = db.relationship('User' , backref="role" ) def __repr__ (self ): return '<Role: %s %s>' % (self.name, self.id ) class User (db.Model): role_id = db.Column(db.Integer, db.ForeignKey('roles.id' )) def __repr__ (self ): return '<User: %s %s %s %s>' % (self.name, self.id , self.email, self.password) @app.route('/' ) def index (): return 'Hello flask!' if __name__ == '__main__' : db.drop_all() db.create_all() app.run(debug=True )
创建了关系引用后,我们可以通过访问数据对象实例的属性来访问相关联的数据,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 In [3]: role = Role(name = "admin") In [4]: db.session.add(role) In [5]: db.session.commit() === 完成角色创建 === In [6]: user1 = User(name='zs', role_id=role.id) In [7]: user2 = User(name='ls', role_id=role.id) In [10]: db.session.add(user1) In [11]: db.session.add(user2) In [12]: db.session.commit() === 完成用户创建 === === 进行关联查询 === In [13]: role.users Out[13]: [<User: zs 1 None None>, <User: ls 2 None None>] In [20]: user1.role Out[20]: <Role: admin 1>
2.4 数据库数据的查询 常用的SQLAlchemy查询过滤器
过滤器
说明
filter()
把过滤器添加到原查询上,返回一个新查询
filter_by()
把等值过滤器添加到原查询上,返回一个新查询
limit
使用指定的值限定原查询返回的结果
offset()
偏移原查询返回的结果,返回一个新查询
order_by()
根据指定条件对原查询结果进行排序,返回一个新查询
group_by()
根据指定条件对原查询结果进行分组,返回一个新查询
常用的SQLAlchemy查询执行器
方法
说明
all()
以列表形式返回查询的所有结果
first()
返回查询的第一个结果,如果未查到,返回None
first_or_404()
返回查询的第一个结果,如果未查到,返回404
get()
返回指定主键对应的行,如不存在,返回None
get_or_404()
返回指定主键对应的行,如不存在,返回404
count()
返回查询结果的数量
paginate()
返回一个Paginate对象,它包含指定范围内的结果
使用示例 返回名字等于wang的所有人:
1 2 User.query.filter_by(name='wang').all()
all()返回查询到的所有对象: