Jestli jsem ten puvodni priklad dobre pochopil tak chyba je tady: setattr(self, _func, self._sql(_sql = _sql))
Pridas sice atribut se spravnym jmenem, ale nestrcis do nej referenci na tu funkci alebrz vysledek z jejiho zavolani. potrebujes neco _zhruba_ (strilim od boku, nevyzkouseno) takoveho: setattr(self, _func, lambda sql, params: self._sql(_sql, params)) Mam-li to brat jako intelektualni cviceni, pripada mi to cely ponekud prekomplikovany, stacila by uplne jednoducha fabricka funkce ktera bude vracet uzaveru se vsim: def queryMaker(conn, query): def queryStub(**params): with conn as cur: cur.execute(query, params) return cur.fetchall() return queryStub --- cut here --- addSpam = queryMaker(conn, "INSERT ham = %(ham)s INTO spam") addSpam(ham = 42) Strkat to jeste do slovniku nema valny smysl – pokud ho budes bouchat rucne, je to zbytecny a pokud by tam byla nejaka dalsi abstrakce (jako treba ze by se ten slovnik odnekud nacital) tak nejde nejak rozume zajistit aby ocekavane parametry odpovidaly skutecnym a cely se to rozsype. (A proto se takovy vylomeniny ve skutecnosti nedelaji…) On 04/25/14 12:07, Marek Sirový wrote: > Ahoj, > > > diky za reakci, sqlalchemy znam a ORM taky, ale mam radeji ciste sql > dotazy. Kazdopadne o to nejde. > > Pravdepodobne jsem spatne popsal problem, me nejde o to pripojit se k > databazi, me jde o to vyzkouset si napsat tu abstrakci. > > Uplne konkretne, chci napsat tridu, ktera podle predaneho pole behem > inicializace si vygeneruje metody dle slovniku. Nedelam to pro nic > konkretniho, jen me bavi python a zkousim co vsechno jde a tim se > ucim dalsi veci > > > > > #moje magicka trida class db: # nejaka magie > > > > # mam slovnik: SQL = { 'addUser' : 'insert into users (name, email) > VALUES ($name, $email);', 'delUser' : 'delete from users where name > = $name', } > > # provedu si inicializaci data = db(SQL) > > # a ted mam objekt data, ktery ma metodu addUser a delUser, # pricemz > kazda z nich prebira **kwargs a podle toho doplni dotaz do db. # > priklad: > > data.addUser(name = 'karel', email = 'ka...@email.tld') > > > Toto pouziti je jen priklad, ktery me napadl pro vyzkouseni, SQL > injection tam samozrejme hrozi, ale o bezpecnost tu nejde, tu bych > stejne resil pravdepodobne uz na formularich pomoci validace a csrf, > pak urcite na db kde z kodu volam stejne jedine procedury a pohledy, > Ale ted si hraju s dymanickymi metodami a chci zkusit generovat je ze > slovniku. Kod uplne v prvnim prispevku je pokus, ktery nefunguje > protoze sem nejpis neco spatne pochopil. > > Predem diky > > _______________________________________________ Python mailing list > python@py.cz http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz > _______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz