RESTFUL Flask API, который извлекает данные SQL каждые 4 часа - PullRequest
0 голосов
/ 03 февраля 2020

Я не был уверен, как сформулировать это в поисковом запросе, чтобы увидеть, получен ли ответ раньше, поэтому извините, если так.

Мой API в настоящее время работает, но я бы хотел, чтобы он повторно запросил SQL таблица для любых изменений каждые 4 часа. Я пробовал множество способов, одним из которых было то, что я придумал ниже (который все еще не работал). Я заставлял его пытаться протянуть руку каждую минуту, чтобы увидеть, запрашивал ли он изменения, но это не так, и только остановка / запуск Flask заставил изменения появиться. Могу я получить какой-нибудь совет?

Я упаковал свое приложение Flask, поэтому в своей функции sql я пытался обновить sh. Ниже мои sql .py и rout.py

sql.py
import pyodbc
import datetime

sql = '''
SELECT PartyID as partyid, Active, FullName, ADLogin, LastName, FirstName, InformalName, EmailAddress, Manager,
Office, CostCenterNum, CostCenter, Inactive_DT, [Key], I_Name, I_MAC, I_Status, I_Serial, I_Description, I_Location,
I_CostCenter, I_AssociatedPerson, I_ADLogin, I_Model, P_DN, P_ADLogin, P_MAC, P_Description, P_Unity,
P_UnitySearch, XOP_Name, XOP_Phone, XOP_Email, Movi_SIPURI, Movi_Username, Movi_DisplayName
FROM TCSAccountsView
WHERE Active = 'True''''

last_lookup = datetime.datetime.now()

def sql_query():
        SQLconnection = pyodbc.connect('driver={SQL Server};'
                               'server=SQLDB550;'
                               'database=Dev_D;'
                               'trusted_connection=yes')
        cursor = SQLconnection.cursor()
        cursor.execute(sql)
        desc = cursor.description
        column_names = [col[0] for col in desc]
        data = [dict(zip(column_names, row))
            for row in cursor.fetchall()]
        cursor.close()
        SQLconnection.close()
        return data

accounts = sql_query()

def get_accounts():
        global last_lookup
        global accounts
        time_now = datetime.datetime.now()
        if time_now - last_lookup > datetime.timedelta(minutes=1):
           accounts = sql_query()
           last_lookup = time_now
        return accounts



routes.py
from flask import request, jsonify
from sqlapi import sql
from sqlapi import app


accounts = sql.get_accounts()



@app.route('/', methods=['GET'])
    def home():
       return "<h1>TCS DB API</h1>"


@app.route('/api/v1/accounts/all', methods=['GET'])
   def api_all():
       return jsonify(accounts)


@app.route('/api/v1/account', methods=['GET'])
   def api_id():
       if 'partyid' in request.args:
           id = int(request.args['partyid'])

   results = []

   for account in accounts:
       if account['partyid'] == id:
           results.append(account)

   return jsonify(results)
...