o m s q l i t e 3 i m p o r t d b a p i 2 a s s q l i t e 3 f r o m f l a s k i m p o r t F l a s k , r e q u e s t , s e s s i o n , g , r e d i r e c t , u r l _ f o r , a b o r t , r e n d e r _ t e m p l a t e , f l a s h # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p = F l a s k ( _ _ n a m e _ _ ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # L o a d d e f a u l t c o n f i g a n d o v e r r i d e c o n f i g f r o m a n e n v i r o n m e n t v a r i a b l e a p p . c o n f i g . u p d a t e ( d i c t ( D A T A B A S E = o s . p a t h . j o i n ( a p p . r o o t _ p a t h , ' f l a s k r . d b ' ) , D E B U G = T r u e , S E C R E T _ K E Y = ' d e v e l o p m e n t k e y ' , U S E R N A M E = ' a d m i n ' , P A S S W O R D = ' d e f a u l t ' ) ) a p p . c o n f i g . f r o m _ e n v v a r ( ' F L A S K R _ S E T T I N G S ' , s i l e n t = T r u e ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d e f c o n n e c t _ d b ( ) : r v = s q l i t e 3 . c o n n e c t ( a p p . c o n f i g [ ' D A T A B A S E ' ] ) r v . r o w _ f a c t o r y = s q l i t e 3 . R o w r e t u r n r v # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d e f g e t _ d b ( ) : i f n o t h a s a t t r ( g , ' s q l i t e _ d b ' ) : g . s q l i t e _ d b = c o n n e c t _ d b ( ) r e t u r n g . s q l i t e _ d b # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @ a p p . t e a r d o w n _ a p p c o n t e x t d e f c l o s e _ d b ( e r r o r ) : i f h a s a t t r ( g , ' s q l i t e _ d b ' ) : g . s q l i t e _ d b . c l o s e ( ) flaskr.py 14 / 20