昨天介绍了 SQLAlchemy 的使用,今天介绍下在 Flask 框架中如何使用它。
本章代码 Demo 地址:https://github.com/wxnacy/study/tree/master/python/flask_sqlalchemy_demo
下载
| 1 | $ pip install Flask | 
Flask_SQLAlchemy 将 SQLAlchemy 整合到 Flask 框架中,使用起来非常方便。
创建 db
SQLAlchemy 需要的 Base, engine, session 都被整合到了一起,用 SQLAlchemy 类实现,该类实例需要传入 Flask 对象,并利用 app.config['SQLALCHEMY_DATABASE_URI'] 来赋值 database 的 URI,1
2
3
4
5
6
7
8
9
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:wxnacy@127.0.0.1:3306/study?charset=utf8mb4'
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
db = SQLAlchemy(app)
通过 db 可以获取基类 db.Model,Session db.session,引擎 db.engine
映射类
在构造映射类的时候,需要继承的基类由 db.Model 来实现1
2
3
4
5
6
7class Book(db.Model):
    __tablename__ = 'book'
    id = db.Column(db.INT, primary_key=True)
    name = db.Column(db.String, default="")
    def format(self):
        return dict(id=self.id, name=self.name)
创建 api
我们创建两个 RESTful 风格的接口,创建和查询1
2
3
4
5
6
7
8
9
10
11
12
def create_book():
    args = request.json
    book = Book(**args)
    db.session.add(book)
    db.session.commit()
    return jsonify(book.format())
def get_book(id):
    book = Book.query.filter_by(id=id).first()
    return jsonify(book.format())
在创建部分,与直接使用 SQLAlchemy 没有什么不同,但是在查询方面,除了可以使用 session.query(Book) 的方式查询,还可以使用 Book.query 的方式查询,这样书写会更方便。
运行
最后加上 app.run() 来启动 web 服务,运行1
$ python run.py
启动项目
创建1
$ curl -X POST localhost:5000/book -H "Content-Type:application/json" -d '{"name":"wxnacy"}'
| 1 | { | 
获取1
$ curl localhost:5000/book/94
| 1 | { | 
参考
 
             
		 
                      