60 lines
1.2 KiB
Python
60 lines
1.2 KiB
Python
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.") )
|