【问题标题】:Tornado: Updated data from mysql not showing in frontend served by tornado. Only shows after restarting the serverTornado:来自 mysql 的更新数据未显示在 Tornado 服务的前端。只在重启服务器后显示
【发布时间】:2017-07-05 23:03:23
【问题描述】:

我有一个为 Angular 前端提供服务的龙卷风后端。在更新数据库时,tornado api 不会获取更新的数据。它仅在我重新启动服务器后出现。有人可以帮我吗?我希望获取的数据能够实时更新。

AngularJS 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 获取数据:

     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))

【问题讨论】:

  • 孤立交易?
  • 是的,它们是孤立的。数据是从另一个未由 tornado api 处理的脚本更新的。
  • 您确认前端部分(角度)发出了 ajax 请求吗?显示一些代码,它可能会有所帮助
  • 我已经添加了代码。请看一看。
  • 如何更新db.table?你提交更改吗?如果没有,您是否启用了自动提交?

标签: python mysql angularjs tornado


【解决方案1】:

您没有说您使用的是什么 mysql 连接器,但如果您使用的是 mysqldb,请尝试以下操作:

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))

另外我建议你开始使用 asyncio 调用,例如使用 python 3.5 或更高版本,你可以使用 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))

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2019-03-20
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2016-06-09
    相关资源
    最近更新 更多