Quellcode durchsuchen

Improved flask backend

Anca vor 5 Jahren
Ursprung
Commit
6c8754131d
1 geänderte Dateien mit 41 neuen und 32 gelöschten Zeilen
  1. 41 32
      nginx-flask-mysql/backend/hello.py

+ 41 - 32
nginx-flask-mysql/backend/hello.py

@@ -1,42 +1,51 @@
 import os
-import time
 from flask import Flask
 import mysql.connector
 
-passfile = open('/run/secrets/db-password', 'r')
-
-#give db some time to start
-time.sleep(5)
-        
-#connect to db
-conn = mysql.connector.connect(
-    user='root', 
-    password=passfile.read(),
-    host='db', # name of the mysql service as set in the docker-compose file
-    database='example',
-    auth_plugin='mysql_native_password'
-)
-
-passfile.close()
-# populate db
-cursor = conn.cursor()
-def prepare_db():
-    cursor.execute('DROP TABLE IF EXISTS blog')
-    cursor.execute('CREATE TABLE blog (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255))')
-    cursor.executemany('INSERT INTO blog (id, title) VALUES (%s, %s);', [(i, 'Blog post #%d'% i) for i in range (1,5)])
-    conn.commit()
-prepare_db()
-
-# server
-app = Flask(__name__)
-@app.route('/')
+
+class DBManager:
+    def __init__(self, database='example', host="db", user="root", password_file=None):
+        pf = open(password_file, 'r')
+        self.connection = mysql.connector.connect(
+            user=user, 
+            password=pf.read(),
+            host=host, # name of the mysql service as set in the docker-compose file
+            database=database,
+            auth_plugin='mysql_native_password'
+        )
+        pf.close()
+        self.cursor = self.connection.cursor()
+    
+    def populate_db(self):
+        self.cursor.execute('DROP TABLE IF EXISTS blog')
+        self.cursor.execute('CREATE TABLE blog (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255))')
+        self.cursor.executemany('INSERT INTO blog (id, title) VALUES (%s, %s);', [(i, 'Blog post #%d'% i) for i in range (1,5)])
+        self.connection.commit()
+    
+    def query_titles(self):
+        self.cursor.execute('SELECT title FROM blog')
+        rec = []
+        for c in self.cursor:
+            rec.append(c[0])
+        return rec
+
+
+server = Flask(__name__)
+conn = None
+
+@server.route('/')
 def listBlog():
-    cursor.execute('SELECT title FROM blog')
+    global conn
+    if not conn:
+        conn = DBManager(password_file='/run/secrets/db-password')
+        conn.populate_db()
+    rec = conn.query_titles()
+
     response = ''
-    for c in cursor:
-        response = response  + '<div>' + c[0] + '</div>'
+    for c in rec:
+        response = response  + '<div>   Hello  ' + c + '</div>'
     return response
 
 
 if __name__ == '__main__':
-    app.run()
+    server.run()