рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡

рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрддрд┐


рд╢реБрдн рджреЛрдкрд╣рд░ рдЗрд╕ рдмреНрд▓реЙрдЧ рдореЗрдВ, рдореИрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдирд╛рдо рдЕрдиреБрдХреНрд░рдореЛрдВ (рд╢рдмреНрджрдХреЛрд╢реЛрдВ) рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдпрд╛ рддреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рд╕реЗ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╣реИрдВ:


рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдЗрдП рдЕрдЬрдЧрд░ рдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ

рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕реНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА, рдПрдХ рдирд╛рдо, рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдзрд╛рд░ рдФрд░ рд▓рд╛рдЗрди рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
CREATE TABLE dicts.points ( id_point serial NOT NULL, --    "name" character varying(50) DEFAULT ''::character varying, --  sync_hour integer DEFAULT 0, --    ... is_active boolean DEFAULT true, --   CONSTRAINT pk_points PRIMARY KEY (id_point) ); 


рдЖрд╡реЗрджрди рдХреЛрдб

рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓

рд╣рдо 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 #      self.query_collector = None #     self.err = '' #     def Connect(self): """     """ try: self.db = pg.DB(dbname=self.dbname,user=self.user,passwd=self.password,host=self.host,port=self.port) except Exception,err: raise Exception("    : %s" % err.message) def Disconnect(self): self.db.close() def SendQueryReturn(self,query): """  SELECT- """ try: self.query_collector = self.db.query(query) except ProgrammingError,err: self.err = " %s:    \n %s" % (__name__,err.message) return -1 else: return self.query_collector.ntuples() def SendQueryNoreturn(self,query): """  ,    """ try: self.db.query(query) except ProgrammingError,err: self.err = " %s:    \n %s" % (__name__,err.message) return -1 else: return 0 def SendBEGIN(self): """   """ try: self.db.query("BEGIN") except ProgrammingError,err: self.err = " %s:    \n %s" % (__name__,err.message) return -1 else: return 0 def SendCOMMIT(self): """   """ try: self.db.query("COMMIT") except ProgrammingError,err: self.err = " %s:    \n %s" % (__name__,err.message) return -1 else: return 0 def SendROLLBACK(self): """   """ try: self.db.query("ROLLBACK") except ProgrammingError,err: self.err = " %s:     \n %s" % (__name__,err.message) return -1 else: return 0 def GetTupleResult(self): """       """ try: res = self.query_collector.getresult() except: res = [] self.query_collector = None return res def GetDictResult(self): """       """ try: res = self.query_collector.dictresult() except: res = {} self.query_collector = None return res def GetError(self): """      """ res = self.err self.err = '' return res def GetObjectStruct(self,name): try: return self.db.get_attnames(name) except Exception,err: self.err = " %s:     \n%s"%(__name__,err.message) return () 


рдЖрдЗрдП рдкреНрд░рд╕реНрддреБрдд рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред 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 рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдЗрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкреЙрдЗрдВрдЯреНрд╕ рдЯреЗрдмрд▓ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рдорд╛рдгреБ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕реЗ рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╡рд╕реНрддреБрдПрдВ рдЙрдирдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреАред

Source: https://habr.com/ru/post/In122923/


All Articles