flask整合sqlite3和ORM框架sqlalchemy
导师打算参加一个Grand Challenge,让我来完成工程实现部分,开发一个小项目,想来想去觉得还是用python脚本实现最方便,所以打算monitor界面做成web端。由于需求不是强业务需求,而且只是少量数据存储和维护,所以就打算用轻量一点的数据库sqlite3来存数据,web就用最方便的flask来实现。由于以前开发网站习惯了使用ORM了,所以这次也打算直接上个ORM框架,找来找去flask下好用的ORM框架就是flask-sqlalchemy了,选择也不多,所以还是比较方便的。这里记录一下整合的方法和过程,方便以后查阅。
1. flask整合sqlalchemy
这一步还是很方便的,由于flask现在有一个flask-sqlalchemy项目,可以方便开发者在flask里使用sqlalchemy,所以我们只要按照文档设置就可以了,非常简单:
from flask_sqlalchemy import SQLAlchemy from flask import Flask app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///config.db" #sqlite:后面跟的3个斜杠表示相对路径,四个斜杠则表示是绝对路径,这个区别可以注意一下 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app)
这样就初始化好ORM了,但是ORM一般需要自己写好对应的映射模型,当然我更喜欢自动生成,可以使用sqlacodegen或者flask专用的flask-sqlacodegen来完成,直接用pip安装即可,然后可以通过命令行工具很方便的生成模型:
sqlacodegen --flask sqlite:///config.db --outfile models.py
这样就会在当前目录下生成models.py文件了,不过用在实际项目中,models.py还需要进行一定修改:
默认情况,models.py里会有一句初始化db的语句:
db = SQLAlchemy()
我们由于在flask应用里已经初始化过db了,所以这里要直接Import进来,把这句话改成:
from 项目主程序 import db
然后就可以在主程序里import models然后使用了。
当然,sqlacodegen默认不生成init方法和repr方法,所以可以自己相应加上,方便模型的使用。
总体而言,在尝试过node.js,Java和python之后,flask是这三种里面开发速度最快的,也是代码量最少的,当然稳定性么就不好说了,但是对于大多数内部项目而言,用flask是快速开发的不二之选。