[python] dynamicke metody
Marek Sirový
msirovy na gmail.com
Pátek Březen 31 13:33:38 CEST 2017
Zdravim,
behem studia pythonu a hrani si s Flaskem a databazemi obecne me napadla abstrakce nad sql, kterou bych si rad zkusil vytvorit, tusim, ze nejde o nic efektivniho, nebo noveho, ale nejsem programator a python mam jako konicek a toto me zajima ciste ze studijnich duvodu, rad bych vedel, jak se to da vyresit, proto prosim nevymlouvejte mi to, ale poradte cestu... Nebo ukazte kde mam chybu
Predstava:
mam tridu db, ktere dam jako slovnik jmeno metody a sql dotaz, tim se mi vytvori objekt s metodami, kterym bude stacit jen predavat parametry a vrati se mi data z databaze. cili melo by fungovat neco takoveho:
#!/usr/bin/env python3
from string import Template
import psycopg2
### trida s dynamickymi metodami
class db:
""" test dynamickych metod
"""
def _sql(self, _sql = None, **kwargs):
""" predloha pro dynamicke funkce
"""
query = Template(_sql).substitute(**kwargs)
print(query)
_self._CUR.execute( query )
return _self._conn.commit()
def __init__(self, SQL = None):
if SQL is None:
raise(KeyError("Musite definovat slovni SQL"))
# DB CONNECT
self._conn = psycopg2.connect("dbname=mail user=marek", cursor_factory= psycopg2.extras.DictCursor)
self._CUR = self._conn.cursor()
# create methods by SQL dict
for _func, _sql in SQL.items():
setattr(self, _func, self._sql(_sql = _sql))
def close(self):
return(True)
if __name__ == '__main__':
'''Priklad pouziti
- pridam zaznam pepa
- smazu zaznam pepa
'''
_SQLS = {
'add' : 'insert into tabulka (name, age, email) VALUES ($name, $age, $email);',
'edit' : 'update tabulka set age = $age, email = $email where name = $name;',
'del' : 'remove from tabulka where name = $name;',
}
data = db(_SQLS)
data.add(name = 'Pepa', age = '12', email = 'pepa12 na gmail.fi')
data.del(name = 'Pepa')
data.close()
Omlouvam se za nedodrzovani PEP, skutecne nejsem moc programator a obcas docela prasim v zapalu boje.
Predem diky za vysvetleni, pomoc, nasmerovani...
Další informace o konferenci Python