django vs flask 负载性能测试对比,谁更快(二)读数据库

上文书对比了二者简单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.
发布了66 篇原创文章 · 获赞 21 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_35753140/article/details/90237093