Ich habe das Beispiel von offiziellen tutorial hier zur Verfügung gestellten versucht:liefert Variablen Klasse dynamisch
http://saratoga.readthedocs.org/en/latest/serviceclasses.html
ich ein paar Änderungen am Code vorgenommen haben, und das ist, wie es aussieht:
http://23.21.167.60:8094/v1/yearlength?name=earth
Mein Problem ist, dass ich die account = 211829 in der URL wie name = Erde bereitstellen muss.
Was ich unten geschrieben habe funktioniert, weil ich die Kontonummer der Klasse angegeben habe. Wie mache ich das dynamisch?
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)
Wie gebe ich die account_num
Variable von PlanetAPI
Klasse PlanetServiceClass
?
und sollte ich MyApi auf das ändern? serviceClass = PlanetServiceClass (account_num) – shantanuo
ok die Antwort aktualisiert. Sie müssen "account_num" zur "request" -Zeit zuweisen, nicht zur Serverinitialisierungszeit. –
Danke. Es funktionierte. Aber es funktioniert nur, wenn ich die myquery Funktion in beiden Klassen kopiere. Warum? – shantanuo