2017-07-05 2 views
0

J'ai un backend tornado qui sert un frontend angulaire. Lors de la mise à jour de la base de données, les données mises à jour ne sont pas récupérées par l'API tornado. Il n'apparaît qu'après le redémarrage du serveur. Quelqu'un pourrait m'aider avec ça? Je veux que les données récupérées soient mises à jour en temps réel.Tornade: Mise à jour des données de mysql n'apparaissant pas dans frontend servi par tornado. Afficher uniquement après avoir redémarré le serveur

AngularJS demande ajax:

$http({ 
      method: "GET", 
      url: "http://localhost:9915/api/" 
     }).then(function mySuccess(response) { 
      console.log(response); 
      $scope.data = response.data; 
      sharedData.set(response.data); 
      for (var i = $scope.data.length - 1; i >= 0; i--) { 

       var coverageVal = $scope.data[i].Coverage; 
       var coverageHealth = $scope.data[i].Health; 

       if (coverageVal >= 95.00) { 
        $scope.data[i]["colorCoverage"] = "cyan"; 
       } else if (coverageVal >= 90.00 && coverageVal < 95.00) { 
        $scope.data[i]["colorCoverage"] = "warning"; 
       } else { 
        $scope.data[i]["colorCoverage"] = "danger"; 
       } 

       if (coverageHealth >= 95.00) { 
        $scope.data[i]["colorHealth"] = "cyan"; 
       } else if (coverageHealth >= 90.00 && coverageHealth < 95.00) { 
        $scope.data[i]["colorHealth"] = "warning"; 
       } else { 
        $scope.data[i]["colorHealth"] = "danger"; 
       } 

      } 
     }, function myError(err) { 
      console.log("error"); 
      console.log(err); 
     }); 

Tornado api pour extraire des données:

 class ApiRequestHandler(web.RequestHandler): 
     def get(self): 
      cur = conn.cursor() 
      cur.execute("SELECT * from db.table") 
      res = [] 
      for row in cur: 
       res.append(row) 
      self.write(json.dumps(res)) 
+0

Transactions isolées? – phd

+0

oui, ils sont isolés. Les données sont mises à jour à partir d'un autre script non géré par le tornado api. –

+0

Confirmez-vous que la partie frontale (angulaire) fait la requête ajax? Montrer du code, ça peut aider – kwarunek

Répondre

0

Vous ne dit connecteur ce que mysql utilisez-vous, mais si vous utilisez mysqldb essayer quelque chose comme ça :

class ApiRequestHandler(web.RequestHandler): 
    def get(self): 
     cur = conn.cursor(MySQLdb.cursors.DictCursor) 
     cur.execute("SELECT * from db.table") 
     rows = cur.fetchall() 
     self.write(json.dumps(rows)) 

Aussi, je vous recommande de commencer à utiliser des appels asynchrones, par exemple en utilisant python 3.5 ou vous pouvez utiliser l'aiomysql

class ApiRequestHandler(web.RequestHandler): 
    async def get(self): 
     cur = await conn.cursor() 
     await cur.execute("SELECT * from db.table") 
     rows = await cur.fetchall() 
     self.write(json.dumps(rows))