Ho provato l'esempio fornito da esercitazione ufficiale trovato qui:fornitura di variabili per classe in modo dinamico
http://saratoga.readthedocs.org/en/latest/serviceclasses.html
ho fatto un paio di modifiche al codice, e questo è come sembra:
http://23.21.167.60:8094/v1/yearlength?name=earth
Il mio problema è che ho bisogno di fornire l'account = 211829 nell'URL proprio come nome = terra.
Quello che ho scritto qui sotto funziona perché ho fornito il numero di conto alla classe. Come faccio a farlo dinamicamente?
import json
from saratoga.api import SaratogaAPI, DefaultServiceClass
class PlanetServiceClass(DefaultServiceClass):
def __init__(self, myaccount):
self.yearLength = {
"earth": self.myquery(myaccount),
"pluto": {"seconds": 7816176000}
}
def myquery(self, myaccount):
import pandas as pd
query = ('select * from mydata198 where account = %s ') % (myaccount)
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://dba:[email protected]/test')
conn = engine.raw_connection()
df=pd.read_sql(query, conn)
return df.to_json()
class PlanetAPI(object):
class v1(object):
def yearlength_GET(self, request, params):
planetName = params["params"]["name"].lower()
return self.yearLength.get(planetName)
APIDescription = json.load(open("planets.json"))
myAPI = SaratogaAPI(PlanetAPI, APIDescription, serviceClass=PlanetServiceClass('211829'))
myAPI.run(port=8094)
Come faccio a passare la variabile account_num
da PlanetAPI
classe per PlanetServiceClass
?
e dovrei cambiare MyApi a questo? serviceClass = PlanetServiceClass (account_num) – shantanuo
ok aggiorna la risposta. È necessario assegnare "account_num" all'ora "request", non al tempo di inizializzazione del server. –
Grazie. Ha funzionato. Ma funziona solo se copio la funzione myquery in entrambe le classi. Perché? – shantanuo