@@ -251,71 +251,91 @@ def vstavi(self):
251251 podatki .append (sql .Literal (vrednost ))
252252 elif stolpec .metadata ["stevec" ]:
253253 generirani .append (stolpec .name )
254- with conn .transaction ():
255- with conn .cursor () as cur :
256- cur .execute (sql .SQL ("""
257- INSERT INTO {tabela} ({stolpci}) VALUES ({podatki})
258- {generirano};
259- """ ).format (
260- tabela = sql .Identifier (self .tabela ()),
261- stolpci = VEJICA .join (sql .Identifier (stolpec )
262- for stolpec in stolpci ),
263- podatki = VEJICA .join (podatki ),
264- generirano = sql .SQL ("RETURNING {generirani}" ).format (
265- generirani = VEJICA .join (sql .Identifier (stolpec )
266- for stolpec in generirani )
267- ) if generirani else PRAZNO
268- ))
269- if generirani :
270- for kljuc , vrednost in zip (generirani , cur .fetchone ()):
271- setattr (self , kljuc , vrednost )
272- self .__nastavi_id ()
254+ try :
255+ with conn .transaction ():
256+ with conn .cursor () as cur :
257+ cur .execute (sql .SQL ("""
258+ INSERT INTO {tabela} ({stolpci}) VALUES ({podatki})
259+ {generirano};
260+ """ ).format (
261+ tabela = sql .Identifier (self .tabela ()),
262+ stolpci = VEJICA .join (sql .Identifier (stolpec )
263+ for stolpec in stolpci ),
264+ podatki = VEJICA .join (podatki ),
265+ generirano = sql .SQL ("RETURNING {generirani}" ).format (
266+ generirani = VEJICA .join (sql .Identifier (stolpec )
267+ for stolpec in generirani )
268+ ) if generirani else PRAZNO
269+ ))
270+ if generirani :
271+ for kljuc , vrednost in zip (generirani , cur .fetchone ()):
272+ setattr (self , kljuc , vrednost )
273+ self .__nastavi_id ()
274+ except errors .IntegrityError :
275+ raise ValueError (f'Napaka pri vstavljanju { self .__class__ .__name__ } z ID-jem { id } !' )
276+ except errors .DataError :
277+ raise TypeError (f'Napaka pri vstavljanju { self .__class__ .__name__ } z ID-jem { id } !' )
273278
274279 def posodobi (self ):
275280 """
276281 Posodobi entiteto v bazi.
277282 """
278283 assert self .__dbid is not None , "Entiteta še ni v bazi!"
279- with conn .transaction ():
280- with conn .cursor () as cur :
281- cur .execute (sql .SQL ("""
282- UPDATE {tabela} SET {vrednosti}
283- WHERE {glavni_kljuc} = {id};
284- """ ).format (
285- tabela = sql .Identifier (self .tabela ()),
286- vrednosti = VEJICA .join (
287- sql .SQL ("""
288- {stolpec} = {vrednost}
289- """ ).format (
290- stolpec = sql .Identifier (stolpec .name ),
291- vrednost = vrednost .niz
292- if isinstance (vrednost , Funkcija )
293- else sql .Literal (vrednost )
294- )
295- for stolpec in fields (self )
296- for vrednost in [self [stolpec .name ]]
297- ),
298- glavni_kljuc = sql .Identifier (self .glavni_kljuc ().name ),
299- id = sql .Literal (self .__dbid )
300- ))
301- self .__nastavi_id ()
284+ try :
285+ with conn .transaction ():
286+ with conn .cursor () as cur :
287+ cur .execute (sql .SQL ("""
288+ UPDATE {tabela} SET {vrednosti}
289+ WHERE {glavni_kljuc} = {id};
290+ """ ).format (
291+ tabela = sql .Identifier (self .tabela ()),
292+ vrednosti = VEJICA .join (
293+ sql .SQL ("""
294+ {stolpec} = {vrednost}
295+ """ ).format (
296+ stolpec = sql .Identifier (stolpec .name ),
297+ vrednost = vrednost .niz
298+ if isinstance (vrednost , Funkcija )
299+ else sql .Literal (vrednost )
300+ )
301+ for stolpec in fields (self )
302+ for vrednost in [self [stolpec .name ]]
303+ ),
304+ glavni_kljuc = sql .Identifier (self .glavni_kljuc ().name ),
305+ id = sql .Literal (self .__dbid )
306+ ))
307+ self .__nastavi_id ()
308+ except errors .IntegrityError :
309+ raise ValueError (f'Napaka pri posodabljanju { self .__class__ .__name__ } z ID-jem { id } !' )
310+ except errors .DataError :
311+ raise TypeError (f'Napaka pri posodabljanju { self .__class__ .__name__ } z ID-jem { id } !' )
302312
303313 def izbrisi (self ):
304314 """
305315 Izbriši entiteto iz baze.
306316 """
307317 assert self .__dbid is not None , "Entiteta še ni v bazi!"
308- with conn .transaction ():
309- with conn .cursor () as cur :
310- cur .execute (sql .SQL ("""
311- DELETE FROM {tabela}
312- WHERE {glavni_kljuc} = {id};
313- """ ).format (
314- tabela = sql .Identifier (self .tabela ()),
315- glavni_kljuc = sql .Identifier (self .glavni_kljuc ().name ),
316- id = sql .Literal (self .__dbid )
317- ))
318- self .__dbid = None
318+ try :
319+ with conn .transaction ():
320+ with conn .cursor () as cur :
321+ cur .execute (sql .SQL ("""
322+ DELETE FROM {tabela}
323+ WHERE {glavni_kljuc} = {id};
324+ """ ).format (
325+ tabela = sql .Identifier (self .tabela ()),
326+ glavni_kljuc = sql .Identifier (self .glavni_kljuc ().name ),
327+ id = sql .Literal (self .__dbid )
328+ ))
329+ self .__dbid = None
330+ except errors .IntegrityError :
331+ raise ValueError (f'Napaka pri brisanju { self .__class__ .__name__ } z ID-jem { id } !' )
332+
333+ @classmethod
334+ def izbrisi_id (cls , id ):
335+ """
336+ Izbriši entiteto s podanim ID-jem iz baze.
337+ """
338+ cls .iz_baze (** {cls .glavni_kljuc ().name : id }).izbrisi ()
319339
320340 @classmethod
321341 def seznam (cls ):
0 commit comments