[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