Привет!
У меня есть приложение на flask и база Postgres. Использую psycopg2.
Возникли сомнения в правильности работы с базой. Я определил функцию коннекта к базе
def get_db():
if 'db' not in g:
g.db = app.config['postgreSQL_pool'].getconn()
return g.db
далее идут rout`ы, напрмиер:
@app.route('/topsecret/test1')
def test1():
title = 'Первый тест'
s = "select * from followers as f left join clanmembers as cm on f.nick = cm.nick left join clans as cl on cm.clanid = cl.clanid order by cl.clanid, f.nick;"
conn = get_db()
c = conn.cursor()
c.execute(s)
text = c.fetchall()
c.close()
s = "select distinct(cl.clanimg), cl.clanid from clans as cl where cl.clanimg is not null order by cl.clanid;"
conn = get_db()
c = conn.cursor()
c.execute(s)
cli = c.fetchall()
c.close()
return render_template('test1.html', title=title, text=text, cli=cli)
@app.route('/topsecret/test2')
def test2():
title = 'Второй тест'
s = "select * from uniquemob as u order by u.mobid desc;"
conn = get_db()
c = conn.cursor()
c.execute(s)
mobs = c.fetchall()
c.close()
s = "select * from mobsinlabs as m order by m.name;"
conn = get_db()
c = conn.cursor()
c.execute(s)
mobsinlabs = c.fetchall()
c.close()
return render_template('test2.html', title=title, mobs=mobs, mobsinlabs=mobsinlabs)
@app.route('/test3')
def test3():
title = 'Третий тест'
s = "select * from savedress as sd order by sd.date desc limit 20"
conn = get_db()
c = conn.cursor()
c.execute(s)
sd = c.fetchall()
c.close()
return render_template('test3.html', title=title, sd=sd)
Что смущает: я каждый раз обращаюсь к коннекту
conn = get_db()
, работаю с курсором и потом закрываю соединение
c.close()
Правильный ли подход? возможно есть более лучший вариант чтобы меньше напрягать базу.
Так же с таким вариантом если один из запросов долго обрабатывается, то другие страницы думают и не открываются пока не отработает первый скрипт. я так понимаю что параллельно не выполняется, что странно. Плюс у меня SocketIO постоянно получает данные и по той же схеме в базу инсертит, апдейтит и селектит данные.