Нужно отображать информацию из БД на страничке, после добавление записи в базу данных через INSERT. Пробовал просто через js обновлять каждую секунду:
setInterval(function()
{
$('#main-table').load(document.URL + ' #main-table');
}, 1000);
Думал дело в том что он не может вызвать функцию повторно, пробовал её вставлять в декоратор. Потом заметил, что единственный способ увидеть изменение в БД это перезапустить проект.
Если какие-то библиотеки, инструменты для решения этой проблемы?
Вот код моего приложения на Flask:
main.py:
from flask import Flask
from flask import render_template
import pymysql
import pymysql.cursors
app = (Flask(__name__))
try:
connection = pymysql.connect(
host='localhost',
port=3306,
user='admin',
password='123',
database='dynamic_output',
cursorclass=pymysql.cursors.DictCursor
)
print("Good")
except Exception as ex:
print('Bad')
print(ex)
def select_all():
with connection.cursor() as cursor:
select_all = "select * from names"
cursor.execute(select_all)
return cursor.fetchall()
@app.route('/')
def index():
return render_template("index.html", select=select_all())
if __name__ == '__main__':
app.run(debug=True)
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.main-table{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 600px;
border-collapse: collapse;
border: 1px solid #F2F2F2;
box-shadow: 0px 0px 20px rgb(0 0 0 / 8%);
}
.title-table{
text-align: start;
font-size: 23px;
}
.content-table{
font-size: 20px;
}
.table-item{
padding: 20px;
border: 1px solid #F2F2F2;
}
</style>
</head>
<body>
<table class="main-table" id="main-table">
<tr class="table-string">
{% for key in select[0].keys() %}
<th class="title-table table-item"> {{ key }}</th>
{% endfor %}
</tr>
{% for lib in select %}
<tr class="table-string">
{% for key, value in lib.items() %}
<td class="content-table table-item"> {{ value }} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
</body>
</html>
Скрипт для создания БД:
create database dynamic_output;
use dynamic_output;
CREATE TABLE IF NOT EXISTS `dynamic_output`.`names` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`age` INT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
INSERT INTO names (id, name, age) VALUES (1, 'Jhon', 25);