上文书对比了二者简单GET json的性能
网上有篇16年的对比文章说django ORM性能要比flask sqlalchemy差,我简单对比了一下读数据库的效率。
环境说明
- flask 1.0.2,Flask-SQLAlchemy 2.4.0, SQLAlchemy 1.3.3,一个app文件,在wsl里gunicorn启动一个worker
- django 2.2.1,sqlparse 0.3.0, 后面这个包是升级django时安装的依赖,不知道对orm速度提升有没有影响 初始化框架,在wsl里gunicorn启动一个worker
- 数据库都是sqlite3,插入相同的数据,简单的表结构,3条数据
- 测试在wsl里使用boom
flask代码
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
db = SQLAlchemy(app)
class Students(db.Model):
id = db.Column('student_id', db.Integer, primary_key=True)
name = db.Column(db.String(100))
city = db.Column(db.String(50))
addr = db.Column(db.String(200))
pin = db.Column(db.String(10))
@property
def serialize(self):
return {'name': self.name,
'city': self.city,
'addr': self.addr,
'pin': self.pin}
@app.route('/')
def index():
return jsonify([i.serialize for i in Students.query.all()])
if __name__ == '__main__':
# db.create_all()
app.run()
flask测试结果
-------- Results --------
Successful calls 3415
Total time 10.0033 s
Average 0.2858 s
Fastest 0.0513 s
Slowest 0.7572 s
Amplitude 0.7059 s
Standard deviation 0.044420
RPS 341
BSI Pretty good
-------- Status codes --------
Code 200 3415 times.
django models代码
from django.db import models
class Students(models.Model):
id = models.IntegerField('student_id', primary_key=True, auto_created=True)
name = models.CharField(max_length=100)
city = models.CharField(max_length=50)
addr = models.CharField(max_length=200)
pin = models.CharField(max_length=10)
def to_dict(self):
return {'name': self.name,
'city': self.city,
'addr': self.addr,
'pin': self.pin}
django views代码
from django.http.response import JsonResponse
from .models import Students
def index(request):
return JsonResponse([i.to_dict() for i in Students.objects.all()], safe=False)
django测试结果
-------- Results --------
Successful calls 3938
Total time 10.0060 s
Average 0.2453 s
Fastest 0.0396 s
Slowest 0.7623 s
Amplitude 0.7228 s
Standard deviation 0.044647
RPS 393
BSI Pretty good
-------- Status codes --------
Code 200 3938 times.