рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрддрд┐
рд╢реБрдн рджреЛрдкрд╣рд░ рдЗрд╕ рдмреНрд▓реЙрдЧ рдореЗрдВ, рдореИрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдирд╛рдо рдЕрдиреБрдХреНрд░рдореЛрдВ (рд╢рдмреНрджрдХреЛрд╢реЛрдВ) рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдпрд╛ рддреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рд╕реЗ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╣реИрдВ:
- рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬрд┐рдирдХреЗ рдирд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ (рдХреНрд╡реЗрд░реА рдореЗрдВ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо)
- рд╕рд░рд▓ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ
рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдЗрдП рдЕрдЬрдЧрд░ рдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ
рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕реНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА, рдПрдХ рдирд╛рдо, рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдзрд╛рд░ рдФрд░ рд▓рд╛рдЗрди рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
CREATE TABLE dicts.points ( id_point serial NOT NULL,
рдЖрд╡реЗрджрди рдХреЛрдб
рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓
рд╣рдо PostgreSQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╣рд┐рдд рдкреАрдЬреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
import pg class Connection: """ DB API2 """ def __init__(self,dbname,user,password,host,port): self.dbname = dbname self.user = user self.password = password self.host = host self.port = port self.db = None
рдЖрдЗрдП рдкреНрд░рд╕реНрддреБрдд рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
SendQueryReturn рдФрд░
SendQueryNoreturn рддрд░реАрдХреЛрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдПрдХ рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЪрдпрди рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рд╕рдлрд▓ рдХреНрд╡реЗрд░реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИред рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд░реНрдЧ рдХреЗ query_collector рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SendQueryNoreturn, рдХреНрд░рдорд╢рдГ, рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡рд╛рдкрд╕ рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ 0 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ -1 рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИрдВред рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг
GetError рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GetTupleResult рдФрд░
GetDictResult рд╡рд┐рдзрд┐рдпрд╛рдБ рдЯреБрдкрд▓реНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдирд╛рдорд┐рдд рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЪрдпрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рд▓реМрдЯрд╛рддреА рд╣реИрдВ ред рдФрд░ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ
GetObjectStruct ред рдпрд╣ рд╡рд┐рдзрд┐ "рд╢рдмреНрджрдХреЛрд╢ рдирд╛рдо" - "рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░" рдЬреЛрдбрд╝реЗ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рджреЗрддреА рд╣реИред
рдХреНрд╡реЗрд░реА рд╕реНрддрд░
рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ред рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИрдВред рдкреАрдЬреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред рдореБрдЦреНрдп рд╢рд░реНрдд рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрддрд░ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
def set_connection(conn): global connection if conn == 'pg': import connection.pg_connection as connection ...
Set_connection рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░
рдХрдиреЗрдХреНрд╢рди рдЙрдкрдирд╛рдо рдХреЗ рддрд╣рдд рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд░реНрдЧ рдЫрд┐рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрдВрддреНрд░ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ:
from query_constants import * class QueryLayout: def __init__(self,dbname,user,password,host='localhost',port=5432): global connection self.err_list = [] if connection: self.conn = connection.Connection(dbname,user,password,host,port) else: self.CONNECTED = False self.err_list = [] self.CONNECTED = self.SetConnection() def SetConnection(self): try: self.conn.Connect() except Exception,err: self.err_list.append(err.message) return False else: return True def CloseConnection(self): self.conn.Disconnect() def QueryNoreturn(self,query): """ , """ if self.conn.SendQueryNoreturn(query) == 0: return 1 else: self.err_list.append(self.conn.GetError()) return 0 def QueryReturn(self,query): """ , """ res = self.conn.SendQueryReturn(query) if res < 0: self.err_list.append(self.conn.GetError()) return res def GetDataTuple(self): return self.conn.GetTupleResult() def GetDataDict(self): return self.conn.GetDictResult() def GetErrors(self): res = self.err_list self.err_list = [] return res def GetObjectStruct(self,objname): return self.conn.GetObjectStruct(objname) class CustomQuery(QueryLayout): def __init__(self,dbname,user,password,host='localhost',port=5432): QueryLayout.__init__(self,dbname,user,password,host,port) def BEGIN(self): if self.conn.SendBEGIN() < 0: err_list = self.conn.GetErrors() err_list.insert(0,u" ") return False return True def COMMIT(self): if self.conn.SendCOMMIT() < 0: err_list = self.conn.GetErrors() err_list.insert(0,u" ") return False return True def ROLLBACK(self): if self.conn.SendROLLBACK() < 0: err_list = self.conn.GetErrors() err_list.insert(0,u" ") return False return True def CustomGet(self,query,mode='dict',warn=False): nRes = self.QueryReturn(query) if nRes > 0: if mode == 'tuple': res = self.GetDataTuple() else: res = self.GetDataDict() return {'res':len(res),'err':[],'inf':res} elif nRes == 0: if warn: return {'res':-1,'err':[u" "],'inf':[]} else: return {'res':0,'err':[],'inf':{}} else: err_list = self.GetErrors() err_list.insert(0,u" ") return {'res':-1,'err':err_list,'inf':[]} def CustomSet(self,query): nRes = self.QueryNoreturn(query) if nRes == 1: return {'res':0,'err':[],'inf':[]} else: err_list = self.GetErrors() err_list.insert(0,u" ") return {'res':-1,'err':err_list,'inf':[]}
рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ,
CustomGet рдФрд░
CustomSet рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдПрдХ рдПрдХреАрдХреГрдд рдРрдб-рдСрди рд╣реИрдВред рд╢рдмреНрджрдХреЛрд╢ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рджреВрд╕рд░рд╛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред рддреАрд╕рд░рд╛ рдкреНрд░рд╢реНрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдХрд╕реНрдЯрдордЧреЗрдЯ рд╡рд┐рдзрд┐, рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдФрд░ рдЦрд╛рд▓реА рдЪрдпрди рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдзреНрд╡рдЬ рдХрд╛ рд░реВрдк рд▓реЗрддреА рд╣реИ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдкреНрд░рд╢реНрди рдФрд░ рдЙрдирдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди
рдЕрдм рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдкреИрдЯрд░реНрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
ADD_NEW_POINT = "select * from dicts.insert_point('%s',%s)" DELETE_POINT = "select * from dicts.delete_point(%s)" EDIT_POINT = "select * from dicts.update_point(%s,'%s',%s)" GET_ALL_POINTS = "select * from dicts.get_all_points"
рдЖрдк рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдЕрдм рдЖрдк рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡рдпрдВ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рддрдВрддреНрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
class QueryCollector(CustomQuery): def __init__(self,dbname,user,password,host='localhost',port=5432): CustomQuery.__init__(self,dbname,user,password,host,port) def AddNewPoint(self,sPointName,nHour): return self.CustomSet(ADD_NEW_POINT%(sPointName,nHour)) def DeletePoint(self,nIdPoint): return self.CustomSet(DELETE_POINT%nIdPoint) def EditPoint(self,nIdPoint,sPointName,nHour): return self.CustomSet(EDIT_POINT%(nIdPoint,sPointName,nHour)) def GetAllPoints(self): return self.CustomGet(GET_ALL_POINTS)
рдбреЗрдЯрд╛ рдореЙрдбрд▓
рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
COLUMN_TYPES = {'int':lambda:int(),'bool':lambda:bool(),'text':lambda:unicode()} CAST_TYPES = {'int':lambda x:int(x),'bool':lambda x:bool(x),'text':lambda x:unicode(x,'utf-8')} POINTS = {'obj_name':'Point','struct':'dicts.get_all_points','select':'GetAllPoints','insert':'AddNewPoint','update':'EditPoint','delete':'DeletePoint'} CONST_NAMES = {'Points':POINTS}
COLUMN_TYPES рдЖрдзрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред CAST_TYPES рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред
POINTS рд╢рдмреНрджрдХреЛрд╢ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реИред рд╡рд░реНрдЧ рдирд╛рдо рдпрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╕рдордп, рд╕рд┐рд▓реЗрдХреНрдЯ, рдЗрдВрд╕рд░реНрдЯ, рдЕрдкрдбреЗрдЯ рдореЗрдердбреНрд╕ рдЖрджрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдЖрдпрд╛ - рд╡рд░реНрдЧ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреА: рдПрдХ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рдорд╛рдгреБ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдзрд╛рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд┐рдкрдЯрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред
class ModelManager: def __init__(self,dbname,user,password,host='localhost',port=5432): self.query_collector = query_layout.QueryCollector(dbname,user,password,host,port) def BuildModel(self,name,**props): """ model builder NAME - the name of data struct, props - additional properties """ c_atts = self.GetMetaData(name) or {} struct = self.query_collector.GetObjectStruct(c_atts['struct']) or {} dctOptions = {} for i in struct.items(): dctOptions[i[0]] = m_const.COLUMN_TYPES.get(i[1])() for i in props.items(): dctOptions[i[0]] = i[1] return [struct,dctOptions] def GetMetaData(self,name): """ get meta data for loading struct """ return m_const.CONST_NAMES.get(name) def GetInlineMethods(self,name,**methods): """ get's methods from QueryCollector object""" c_atts = self.GetMetaData(name) dctMethods = {} if methods: dctMethods.update(methods) if c_atts: try: dctMethods['Update'] = getattr(self.query_collector,c_atts['update']) except: dctMethods['Update'] = lambda:Warning("This method is not implemented!") try: dctMethods['Delete'] = getattr(self.query_collector,c_atts['delete']) except: dctMethods['Delete'] = lambda:Warning("This method is not implemented!") return dctMethods def GetCollectMethods(self,name,**methods): """ get's methods from QueryCollector to Collection object """ c_atts = self.GetMetaData(name) dctMethods = {} if methods: dctMethods.update(methods) if c_atts: try: dctMethods['Insert'] = getattr(self.query_collector,c_atts['insert']) except: dctMethods['Insert'] = lambda:Warning("This method is not implemented!") try: dctMethods['Select'] = getattr(self.query_collector,c_atts['select']) except: dctMethods['Select'] = lambda:Warning("This method is not implemented!") return dctMethods def CreateClass(self,name,i_methods={},props={}): """ creates a new object """ c_atts = self.GetMetaData(name) print c_atts o_meth = self.GetInlineMethods(name,**i_methods) struct,o_prop = self.BuildModel(name,**props) obj = classobj(c_atts['obj_name'],(object,),o_meth) setattr(obj,'struct',struct) for i in o_prop.items(): setattr(obj,i[0],i[1]) return obj def InitObject(self,obj,**values): dct_keys = obj.__dict__.keys() new_obj = obj() for i in values.items(): if i[0] in dct_keys: try: new_obj.__dict__[i[0]] = m_const.CAST_TYPES[new_obj.struct[i[0]]](i[1]) except: new_obj.__dict__[i[0]] = None return new_obj def InitCollection(self,name,**props): o = self.CreateClass(name) coll_meth = self.GetCollectMethods(name) collection = classobj(name,(object,),coll_meth)() if props: collection.__dict__.update(props) setattr(collection,'items',[]) dctRes = collection.Select() if dctRes['res']>= 0: collection.items = [self.InitObject(o,**i) for i in dctRes['inf']] return collection
ModelManager рд╡рд░реНрдЧ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ (BuildModel) рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GetInlineMethods рдФрд░
GetCollectMethods рд╡рд┐рдзрд┐рдпрд╛рдБ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХреНрд╕реЗрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ
рдмрд╛рдБрдзрддреА рд╣реИрдВред рдПрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдкрдбреЗрдЯ рдФрд░ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ, рдФрд░ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдореНрдорд┐рд▓рд┐рдд рдФрд░ рдЪрдпрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
CreateClass рд╡рд┐рдзрд┐
рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рд╣рдо рдирдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреНрд▓рд╛рд╕реЛрдмрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЕрдм рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, ModelManager рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ InitCollection рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ
рдЖрдЗрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкреЙрдЗрдВрдЯреНрд╕ рдЯреЗрдмрд▓ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рдорд╛рдгреБ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕реЗ рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╡рд╕реНрддреБрдПрдВ рдЙрдирдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреАред