Thread View: pl.comp.lang.python
4 messages
4 total messages
Started by hubert depesz lubaczewski
Tue, 17 Jan 2012 15:12
Flask: połączenie do bazy i logowanie
Author: hubert depesz lubaczewski
Date: Tue, 17 Jan 2012 15:12
Date: Tue, 17 Jan 2012 15:12
69 lines
2636 bytes
2636 bytes
elo
czytam sobie po kolei tutorial do flaska, więc możliwe, że do
odpowiedniego momentu jeszcze nie doczytałem, ale mam następujące
pytania:
1. Jak mogę nawiązać stałe połączenie do bazy?
Mam taki kod:
#v+
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import psycopg2
from flask import Flask, url_for, render_template, request, flash, g
# Default configuration
DEBUG = False
SECRET_KEY = 'dev key'
HOST = '0.0.0.0'
DB_DATABASE = 'jab'
DB_PORT = 5920
DB_HOST = '/tmp'
# Default configuration
app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('JDC_SETTINGS', silent=True)
def get_db_connection():
conn_details = dict()
for i in ( j for j in ( 'database', 'user', 'password', 'host', 'port', 'sslmode' ) if app.config.has_key( 'DB_' + j.upper() ) ):
conn_details[ i ] = app.config[ 'DB_' + i.upper() ]
return psycopg2.connect( **conn_details )
@app.before_request
def before_request():
g.db = get_db_connection()
@app.teardown_request
def teardown_request(exception):
g.db.rollback()
@app.route('/')
def index():
c=g.db.cursor()
c.execute("SELECT version()")
version = c.fetchone()[0]
return render_template( 'index.html', version=version)
if __name__ == '__main__':
app.run( host=app.config['HOST'] )
#v-
I to działa, ale dla każdego requestu nawiązuje nowe połączenie.
Jak mogę zrobić by połączenie było nawiązane za pierwszym razem jak jest
potrzebne, ale potem by nie było zamykane?
2. Jak mogę zrekonfigurować logger flaskowy? Próbowałem jakiś cudów
i nic mi nie wychodziło. Najprostsza zmiana - logowanie do pliku,
a nie na stdout.
depesz
--
The best thing about modern society is how easy it is to avoid contact with it.
http://depesz.com/
Re: Flask: połączenie do bazy i logowanie
Author: Marcin Kasperski
Date: Thu, 19 Jan 2012 10:49
Date: Thu, 19 Jan 2012 10:49
39 lines
2595 bytes
2595 bytes
>
> Jak mogę zrobić by połączenie było nawiązane za pierwszym razem jak jest
> potrzebne, ale potem by nie było zamykane?
Zachować je gdzieś na zmiennej globalnej?
Nie znam Flaska więc nie wiem czy on działa wątkowo, czy nie. Jeśli
wątkowo, to pewnie należałoby stosować jakąś pulę połączeń i brać je i
zwracać w requestach (SQLAlchemy ma po temu pewne udogodnienia np.),
jeśli bezwątkowo, starczy zrobić połączenie „poza funkcją” i go używać.
> 2. Jak mogę zrekonfigurować logger flaskowy? Próbowałem jakiś cudów
> i nic mi nie wychodziło. Najprostsza zmiana - logowanie do pliku,
> a nie na stdout.
Tam jest zdaje się standardowy pythonowy logging używany?
Jeśli tak, to najprościej
import logging
logging.basicConfig(filename="blahblah.txt", level=logging.DEBUG)
bardziej wyrafinowanie można ćwiczyć zabawy w stylu
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
debug_file = logging.handlers.RotatingFileHandler(LOG_DIR+'/debug.log', 'a', 16*1024*1024, 25)
debug_file.setLevel(logging.DEBUG)
debug_file.setFormatter( logging.Formatter('[%(asctime)s] [%(name)s/%(levelname)s] %(message)s') )
root_logger.addHandler(debug_file)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
console.setFormatter(logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s'))
root_logger.addHandler(console)
(tutaj daję debugging do rotujących się co 16MB plików a info i błędy także na konsolę, można
też np. różnie kierować zależnie od „tematu”)
Ogólnie patrz doce do modułu logging.
Re: Flask: połączenie do bazy i logowanie
Author: hubert depesz lubaczewski
Date: Thu, 19 Jan 2012 15:19
Date: Thu, 19 Jan 2012 15:19
18 lines
1485 bytes
1485 bytes
On 2012-01-19, Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl> wrote:
>> Jak mogę zrobić by połączenie było nawiązane za pierwszym razem jak jest
>> potrzebne, ale potem by nie było zamykane?
> Zachować je gdzieś na zmiennej globalnej?
liczyłem, że może będzie coś poza globalami. jakiś odpowiednik "g" który
jest na stałe, a nie tylko na request.
> import logging
> logging.basicConfig(filename="blahblah.txt", level=logging.DEBUG)
aaaaa. kumam. Dzięki wielkie.
depesz
--
The best thing about modern society is how easy it is to avoid contact with it.
http://depesz.com/
Re: Flask: połączenie do bazy i logowanie
Author: Marcin Kasperski
Date: Wed, 25 Jan 2012 10:46
Date: Wed, 25 Jan 2012 10:46
20 lines
1643 bytes
1643 bytes
hubert depesz lubaczewski <depesz@depesz.com> writes:
> On 2012-01-19, Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl> wrote:
>>> Jak mogę zrobić by połączenie było nawiązane za pierwszym razem jak jest
>>> potrzebne, ale potem by nie było zamykane?
>> Zachować je gdzieś na zmiennej globalnej?
>
> liczyłem, że może będzie coś poza globalami. jakiś odpowiednik "g" który
> jest na stałe, a nie tylko na request.
Wiesz, globale to właśnie takie coś na stałe ;-)
Jak chcesz koniecznie g, to napisz
g = {}
i potem już możesz
g['db'] = cośtam
;-) A jak chcesz pisać g.db to zrób g jako obiekt pustej klasy.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads