Вводные даные:
Есть веб приложение на Flask с БД в которой есть таблица из трех колонок:
class Pnh(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date = db.Column(db.DateTime, default=datetime.utcnow)
И есть вот такая диаграмма из Chart.js:
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [{
label: '# of Votes',
data: amount_chart ,
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
@app.route('/chart')
def chart():
amount_titles = db.session.query(db.func.count(Pnh.title).filter(extract('year', Pnh.date) == 2023).filter(extract('month', Pnh.date) == 1)).all()
amount_chart = []
for x, in amount_titles:
amount_chart.append(x)
return render_template('chart.html', amount = json.dumps(amount_chart))
amount_titles = db.session.query(db.func.count(Pnh.title).filter(extract('year', Pnh.date) == 2023).filter(extract('month', Pnh.date) == 1)).all()
Как сделать так, чтобы из базы данных вывести количество статей, записанных в каждом месяце и чтобы это в диаграмму вывести. Только написать 12 раз тот же код, меняя только месяц и получится куча кода и как-то грязно или есть какой-то другой выход?
Код из HTML на страницу с диаграммой:
{% extends 'base.html' %}
{% block title %}
График
{% endblock %}
{% block body %}
<div class="container">
<canvas id="myChart"></canvas>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
let amount_chart = JSON.parse({{ amount | tojson }});
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [{
label: '# of Votes',
data: amount_chart ,
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
{% endblock %}