def haeAineID(nimi): sqlAineIDhaku = ('SELECT AineID FROM Aine ' 'WHERE Nimi LIKE :nimi') rivit = tietokanta.haeKannasta(sqlAineIDhaku,{"nimi" : nimi},"r"); try: return rivit[0]['AineID'] except: return "uusi"
def index(req): req.content_type = "application/json; charset=UTF-8" id = str(req.form.getfirst("id","")) hlo = str(req.form.getfirst("Resepti.Henkilomaara","")) nimi = str(req.form.getfirst("Resepti.Nimi","")) kuvaus = str(req.form.getfirst("Resepti.Kuvaus","")) ruokalaji = str(req.form.getfirst("Ruokalaji.Nimi","")) ainemaara = str(req.form.getfirst("Liittyy.Maara","")) ainelaji = str(req.form.getfirst("Liittyy.Yksikko_Lyhenne","")) kaynnissa = True; i = 0; aineet = {} ainenimi = req.form.getlist("Aine.Nimi") maarat = req.form.getlist("Liittyy.Maara") lajit = req.form.getlist("Liittyy.Yksikko_Lyhenne") ainePaivityksetDict = {} aineMaarat = [] aineLajit = [] aineNimet = [] for maara in maarat: palat = maara.split(":") key = palat[1].split("_") AineID = haeAineID(key[0]) key[0] = str(AineID) avain = key[0]+"_"+key[1]+"_"+key[2] + ":"+key[3] try: ainePaivityksetDict[avain.split(":")[0]] except KeyError: alustus = {"nimi" : "","laji":"","maara" : "" } ainePaivityksetDict[avain.split(":")[0]] = alustus ainePaivityksetDict[avain.split(":")[0]]["maara"] = palat[0] for aine in ainenimi: palat = aine.split(":") key = palat[1].split("_") req.write(str(key)) AineID = haeAineID(key[0]) uusi_id = str(haeAineID(palat[0])) key[0] = str(AineID) avain = key[0]+"_"+key[1]+"_"+key[2] + ":"+key[3] req.write(avain) tmp = {} try: ainePaivityksetDict[avain.split(":")[0]] except KeyError: alustus = {"nimi" : "","laji":"","maara" : "" } ainePaivityksetDict[avain.split(":")[0]] = alustus ainePaivityksetDict[avain.split(":")[0]]['nimi'] = uusi_id for laji in lajit: palat = laji.split(":") key = palat[1].split("_") AineID = haeAineID(key[0]) key[0] = str(AineID) avain = key[0]+"_"+key[1]+"_"+key[2] + ":"+key[3] try: ainePaivityksetDict[avain.split(":")[0]] except KeyError: alustus = {"nimi" : "","laji": "","maara" : "" } ainePaivityksetDict[avain.split(":")[0]] = alustus ainePaivityksetDict[avain.split(":")[0]]["laji"] = palat[0] kuvausDict = {"id":id,"value" : kuvaus} nimiDict = {"id":id,"value" : nimi} hloDict = {"id":id,"value" : hlo} taulukko = [] sqlRuokalajiHaku = ('SELECT RuokalajiID FROM Ruokalaji ' 'WHERE Nimi LIKE :nimi') ruokalajiDict = {"nimi":ruokalaji} sqlRuok = ('UPDATE RESEPTI ' 'SET RuokalajiID=:value ' 'WHERE ReseptiID=:id ') sqllat = [] if len(ruokalaji) > 0: rivit = tietokanta.haeKannasta(sqlRuokalajiHaku,ruokalajiDict,"r"); req.write(str(rivit[0]['RuokalajiID'])) ruokalajiID = rivit[0]['RuokalajiID'] ruokDict = {"id":id,"value" : ruokalajiID} taulukko.append(ruokDict) sqllat.append(sqlRuok) taulukko.append(kuvausDict) taulukko.append(nimiDict) taulukko.append(hloDict) sqlNimi = ('UPDATE RESEPTI ' 'SET Nimi=:value ' 'WHERE ReseptiID=:id ') sqlhlo = ('UPDATE RESEPTI ' 'SET Henkilomaara=:value ' 'WHERE ReseptiID=:id ') sqlKuvaus = ('UPDATE RESEPTI ' 'SET Kuvaus=:value ' 'WHERE ReseptiID=:id ') sqllat.append(sqlKuvaus) sqllat.append(sqlNimi) sqllat.append(sqlhlo) i = 0; while i < len(taulukko): if taulukko[i]['value'] != None and taulukko[i]['value'] != "": tietokanta.haeKannasta(sqllat[i],taulukko[i],"w"); i = i+1; sqlLiittyy = ('INSERT INTO Liittyy (Resepti_ReseptiID,Aine_AineID,Yksikko_Lyhenne,Maara) ' 'VALUES (:id,:nimi,:laji,:maara) ') sqlPoisto = ('DELETE FROM Liittyy ' 'WHERE Resepti_ReseptiID=:id AND ' 'Aine_AineID=:nimi AND Yksikko_Lyhenne=:laji AND Maara=:maara ') sqlUpdate = ('UPDATE Liittyy ' 'SET Aine_AineID=:nimi, Yksikko_Lyhenne=:laji, Maara=:maara ' 'WHERE Aine_AineID=:vanhaNimi AND Yksikko_Lyhenne=:vanhaLaji AND Maara=:vanhaMaara ') sqlLoytyyko = ('SELECT * ' 'FROM Liittyy ' 'WHERE Resepti_ReseptiID=:id AND ' 'Aine_AineID=:nimi AND Yksikko_Lyhenne=:laji AND Maara=:maara ') #UPDATE table_name #SET column1=value1,column2=value2,... #WHERE some_column=some_value; for paivitys in ainePaivityksetDict: paivitys = paivitys.split(":")[0] palat = paivitys.split("_") maara = ainePaivityksetDict[paivitys]["maara"] nimi = ainePaivityksetDict[paivitys]["nimi"] laji = ainePaivityksetDict[paivitys]["laji"] if laji == "": laji = palat[2] if maara == "": maara = palat[1] if nimi == "": nimi = palat[0] dicti = {"id":id,"laji" : laji,"maara": maara,"nimi" : nimi} poistoDict = {"id": id, "laji": palat[2], "maara" : palat[1],"nimi":palat[0]} updateDict = {"id":id,"vanhaLaji" : palat[2], "vanhaMaara" : palat[1], "vanhaNimi" : palat[0], "laji" : laji,"maara": maara,"nimi" : nimi } rivit = tietokanta.haeKannasta(sqlLoytyyko,poistoDict,"r"); if(len(rivit) > 0): tietokanta.haeKannasta(sqlUpdate,updateDict,"w"); else: tietokanta.haeKannasta(sqlLiittyy,dicti,"w"); vaiheet = str(req.form.getfirst("vaiheet","")) i = 0 vaiheTaulukko = vaiheet.split("_") vaiheSQLupdate = ('UPDATE Ohje ' 'SET ohjeteksti=:ohje ' 'WHERE ReseptiID=:id AND Vaihenro=:vaihe') vaiheSQLinsert = ('INSERT INTO Ohje (Vaihenro,ReseptiID,Ohjeteksti) ' 'VALUES (:vaihe,:id,:ohje)') sqlLoytyyko = ('SELECT * ' 'FROM Ohje ' 'WHERE ReseptiID=:id AND ' 'Vaihenro=:vaihe') while i < len(vaiheTaulukko): vaihe = vaiheTaulukko[i] ohjeteksti = str(req.form.getfirst(vaihe,"")) req.write(vaihe) req.write(ohjeteksti) vaiheDict = {"id":id,"vaihe" : vaihe,"ohje" : ohjeteksti} loytyykoDict = {"id":id,"vaihe" : vaihe} rivit = tietokanta.haeKannasta(sqlLoytyyko,loytyykoDict,"r"); if len(rivit) < 1 and vaihe != "" and ohjeteksti != "" and vaihe != None and ohjeteksti != None: tietokanta.haeKannasta(vaiheSQLinsert,vaiheDict,"w"); else: if vaihe != "" and ohjeteksti != "" and vaihe != None and ohjeteksti != None: tietokanta.haeKannasta(vaiheSQLupdate,vaiheDict,"w"); i = i+1 aineet = req.form.getlist("aine") aineSQLinsert = ('INSERT INTO Liittyy (Maara,Resepti_ReseptiID,Aine_AineID,Yksikko_Lyhenne) ' 'VALUES (:maara,:id,:nimi,:laji)') aineSQLPoisto = ('DELETE FROM Liittyy ' 'WHERE Resepti_ReseptiID =:id ') sqlLoytyykoAine = ('SELECT * ' 'FROM Liittyy ' 'WHERE Aine_AineID=:nimi AND Resepti_ReseptiID=:id ') aineSQLupdate = ('UPDATE Liittyy ' 'SET Maara=:maara, Aine_AineID=:nimi,Yksikko_Lyhenne=:laji ' 'WHERE Resepti_ReseptiID=:id AND ' 'Maara=:maara AND ' 'Aine_AineID=:nimi AND ' 'Yksikko_Lyhenne=:laji') virheet = {} virheet['samat'] = [] if(len(aineet) > 0): tietokanta.haeKannasta(aineSQLPoisto,{"id":id},"w") for aine in aineet: ainepalat = aine.split("_") aineenNimi = haeAineID(ainepalat[0]) if ainepalat[2] == "desiƤ": ainepalat[2] = "dl" if ainepalat[2] == "teelusikkaa": ainepalat[2] = "tl" if ainepalat[2] == "grammaa": ainepalat[2] = "g" aineKentatDict = {"id" : id, "nimi" : aineenNimi, "maara" : ainepalat[1] , "laji" : ainepalat[2] } #rivit = tietokanta.haeKannasta(sqlLoytyykoAine,{"id":id,"nimi":aineenNimi},"r") tietokanta.haeKannasta(aineSQLinsert,aineKentatDict,"w") poistettavat = req.form.getlist("poistettava") ainePoistoSQL = ('DELETE FROM Liittyy ' 'WHERE Resepti_ReseptiID =:id AND Aine_AineID=:nimi AND ' 'Yksikko_Lyhenne=:laji') vaihePoistoSQL = ('DELETE FROM Ohje WHERE Vaihenro=:vaihe AND ReseptiID=:id') for poistettava in poistettavat: poistoPalat = poistettava.split("_") if len(poistoPalat) > 2: aineID = haeAineID(poistoPalat[0]) req.write(poistoPalat[0]) tietokanta.haeKannasta(ainePoistoSQL,{"id":id,"nimi":aineID,"laji":poistoPalat[2]},"w") else: req.write(poistoPalat[1]) tietokanta.haeKannasta(vaihePoistoSQL,{"id":id,"vaihe":poistoPalat[1]},"w") return virheet