Я не был уверен, как сформулировать это в поисковом запросе, чтобы увидеть, получен ли ответ раньше, поэтому извините, если так.
Мой 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)