import sqlite3 conn = sqlite3.connect( 'babyorm.db' ) conn.row_factory = sqlite3.Row c = conn.cursor() class Model( dict ): def __init__( self, **kwargs ): for key, value in kwargs.items(): self[key] = value @staticmethod def __build_row( row ): return dict(zip(row.keys(), row)) @staticmethod def __parse_args( obj ): return " AND ".join("{} = '{}'".format(name, value) for name, value in obj.items()) @classmethod def all( cls ): c.execute( "SELECT * FROM {}".format(cls.__name__) ) return [ cls(**cls.__build_row( row )) for row in c ] @classmethod def get( cls, **kwargs ): c.execute( "SELECT * FROM {} WHERE {} limit 1".format( cls.__name__, cls.__parse_args( kwargs ) ) ) return cls( **cls.__build_row( c.fetchone() ) ) @classmethod def filter( cls, **kwargs ): c.execute( "SELECT * FROM {} WHERE {} ".format( cls.__name__, cls.__parse_args( kwargs ) ) ) return [ cls(**cls.__build_row( row )) for row in c ] ###don't touch the code for these class Users(Model): pass class Stocks(Model): pass if __name__ == '__main__': from pprint import pprint print( 'all' ) pprint( Users.all() ) print( 'get' ) pprint( Users.get(name="Kenny") ) print( 'filter' ) pprint( Users.filter(name="Dr.") )