Autor | Zpráva | ||
---|---|---|---|
MarkOh89898 Profil * |
#1 · Zasláno: 7. 9. 2016, 16:13:53
Ahoj,
neviete jak to funguje?:) trans = db.getTransaction() except MySQLdb.Error, (code, msg): return { " padne" } trans.commit() chcem sa spytat, ci pri chybe db (except) sa automaticky spravy rollback alebo sa ukonci transakcia ihned, pripadne sa caka na timeoute? diky |
||
mckay Profil |
#2 · Zasláno: 7. 9. 2016, 21:48:32
MarkOh89898:
Obávám se, že kód, který uvádíte není dostačující - nejde z něho poznat co je proměnná db , která metodu, jíž se týká dotaz obsahuje. Můžu se ovšem pokusit o informovaný odhad.
V případě, že transakce, kterou chcete provést vyvolá vyjímku typu MySQLdb.Error je přerušena aktuálně prováděná funkce (nebo metoda) a navrací hodnotu následující za výrazem return . Pokud k této výjimce nedojde, pokračuje provádění funkce/metody dále a je voláno trans.commit() , které až začne provádět něco s databází. V případě chyby tedy není třeba nic rollbackovat, protože ještě nic provedeno nebylo. V případě vážnějšího zájmu si můžete nastudovat něco o transakcích.
K Vašim otázkám tedy: 1. Rollback se s nejvyšší pravděpodobností neprovede, protože není co rollbackovat. 2. Transakce rozhodně na timeout nečeká, nevidím důvod, proč by měla. |
||
TomášK Profil |
mckay
Kód by mohl být explicitnější, ale pochopil jsem z něj, o co jde. Otázka zní, jestli vyhození výjimky ukončí transakci nebo ne. Příkaz, který by tu výjimku mohl vyhodit, uvedený není, ale je zjevné, kam ho zařadit. MarkOh89898 Můj (nepříliš kvalifikovaný) tip je, že tam ta transakce zůstane viset a správně by bylo volat explicitní rollback. Na webu MySQL jsem našel, že existuje in_transaction, pomocí toho by se to dalo zjistit. I commit může vyhodit chybu, měl by být v tryblocku. Podle mě je vhodná podoba (pseudokód) try: tran = getTransaction() tran.execute() tran.commit() except e: tran.rollback() throw e |
||
MarkOh89898 Profil * |
#4 · Zasláno: 8. 9. 2016, 14:06:13
jj, tak ako to pochopil tomasK
mohol som to ale napisat fakt lepsie, sorry :) teda ak by to padlo na commit, je mozne ze transakcia ostane vysiet tiež? rozmyslal som ci automaticky except MySQLdb.Error neukonci transakciu pokial v nejakej je.. ale to by bola asi hlupost keby to tak fungovalo :D |
||
Časová prodleva: 7 let
|
0