From e2d628df0d5f5875c05a818494e7785a08b2ab0c Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Thu, 29 May 2025 18:55:02 +0200 Subject: [PATCH] "feat: Implement database backup for myp.db-shm and myp.db-wal, add myp.db.backup_20250529_185343" --- backend/app/database/myp.db-shm | Bin 32768 -> 32768 bytes backend/app/database/myp.db-wal | Bin 4152 -> 12392 bytes .../database/myp.db.backup_20250529_185343 | Bin 0 -> 106496 bytes .../app/utils/database_schema_migration.py | 24 ++++++++++++++---- 4 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 backend/app/database/myp.db.backup_20250529_185343 diff --git a/backend/app/database/myp.db-shm b/backend/app/database/myp.db-shm index a0b5a7dc002fcecb4708fd77398c250d603fc56b..8836a0e8ecbc0bba4479350dea5284055d56d02f 100644 GIT binary patch delta 169 zcmZo@U}|V!s+V}A%K!pQK+MR%AixZyrGVH-%;o#5^IiP^3b7jQ5#Zk)($1puNQY+%YqVa}?3Wh4|gj5*;RjIK7Rf&UjWv0NigSdH# zxvBA~xrv!MKvfEc(yT1v+7LVI5ei}Qax5(3h7ehVB+L|`ZZ2jPaR&b4lEji?LoFs2 sS!dybqRhM!Y#x9~#2cCc{lLf~Yb*{E0vQct3xYMqgG?(eHd6pX0ACZ4ng9R* delta 7 OcmaEnutQ;kg#Z8#M*|rE diff --git a/backend/app/database/myp.db.backup_20250529_185343 b/backend/app/database/myp.db.backup_20250529_185343 new file mode 100644 index 0000000000000000000000000000000000000000..e90a7390471285af27ca80d3563b3264c1210e11 GIT binary patch literal 106496 zcmeI5?{6DNddImIMT(SV#_{R4O`vuGJGEF#vX&Ah*+$UN3S}!+D2Jxv7>7G%#T`kT zklZzQDO&-GKz5LG`{M5X0ey3SK!Kt!?rq=nO^d_5?Jrz`0zqFjMS%h-a6r+S*`KpZ zN<8FjH^!H?Ozu20&&>0gXXcsR8PWGX*fJcV?3ule<|s?4*HV&{dPh-Gsgy*2-k?AJ zYnpyY`xo?`$xnMpsf90#<2094_zlZ@zVMsLUrqgNGClE&?8liOjc-dgQeU5@Pk+eO?e~f8G<)PBd$+}_vw})drp)GZhOTVZ8r56Xx>DP2D7BrftvMy1>uMdM zd|0Wk->%eW)y2i4ASE5mXoup`Vv&{U5zRKcN~8KwgI((Vp5_>4x7jheejV}jzC-M& ztVMM=L~l}uc$b1`Y`$M*MVQfjJE+jB&*~XnhxD4E2`sPaSk0EHi>+sZPt4s|R;}+G zn6$hVXfC^!Fdcn6*^WJ^18 zjr}gIU~rG!t#7_xsXtKeR39j_hR%6zY}c!sw`weHHY`eY>Ey;@tZ-c!6}dte#2 zvxWRLX>i_<`|goYg1SI&aFGa_5lcj)&E+&N;K@goVAutw^;Ui23&XE-kH#&p_p`{(QO-&EHcE}K?F03mzx3{;dl^PqZ zr#Xe!9)U>MU-{zk=eevrKQBF1IS!uPBE615ebMaN@$0+*B`#%Lcv?8s2sXB~E}P7I zPLn%X#EdQ>Ivo$*0FD~S%6M*+C?y#0Rh$?WetL9Fur$|WsY5g-vhu}?(if&1bB=6> zbee5*-?qb#Il=CT-~?B2j1G-6TE`0JXaPo>9Fj0Nlw$5ci`v?L=q@z2#B-Q>zb$0o zrpNd*A2F<^rt5UV2}6T7f%D9?ny!Z&r-M#r#0LlB zAw$}YR{kQQOwD8}=wgrb3|av-MOQYqwkv$KFg$>okGjIt!<0nV7ST0?VDPu=X;#g* zjY59YhtE>CGg(=dr6=APrRyAR4?; z*H^xOgz_Q1($?t0(pydlju2;?FFw7U&dM`0(w8khF8t`^zmE$B`Kc$^BrLNME6@&I z;f0e76Ej=drW^2rVdD#i&lDZ4HE0qM9LZ|;_hYNXq@0b+liSSISTw9ZGJCqvL_yo& zF-AwFaY%#!GI*`byR3CUTA$K>jxM6(UB-az)HXlZsVcJ(3dMZ!>Uc(8pOI2VS0|6X zyAZloHu<%`h_joj-;0^24T-z)kF!Cr3v0NgdqV8wM($8+R-?D($WQ>K1U9LvaW%ftMD_hz%i-_pf1r)O1p)-m^< zx-c|od+fJzOnaN$G%hD-uh6hFujKD(EVMr$F-FfOXc~+@_gx^>1-=l?Tj|1MQ{bnfeOWa?k0?$HapKmY_l00ck)1V8`;KmY_l;Quv&<4opU>JO)H zT)uKymfxhuukX6wOr@;cRn_u+()(0dTwYY>m7Ap3roS0JuQYB})N7>$b!BZ~aY0>N zxwdw_R9>!Jud3JS*MY1EGQNGv|1tOWXmJudQmtNB)rFPivRWz~XT}FNq nmc@pY zqYYUeu_08)>TxDLxFO3UHe^X`$a1tHOCvW#T|3T<4Q|NNhz%);4Oxmdq%>+n)|Si1 znKOeMQW~)#s@RZHv?1!K4OuNOA7`Y&4N*sI$fDQ~HQJEH5gVeesAabQpDFxVs_-9$ ze=PiM;japRK`-zE0T2KI5C8!X009sH0T2KI5C8!Xcs>L!j9rn$d-|13GOawGOj}MT z)0W1PX{9r-k6p=$b*S$5|NS~u`1SKK3tB+{1V8`;KmY_l00ck)1V8`;KmY`uHvvV; zq$VaND&k=k@0$VF)U}l|yZ@*E=^tJo00JNY0w4eaAOHd&00JNY0w4eauP_1J|G&bW z3)4UV1V8`;KmY_l00ck)1V8`;K)@q_`+v9s2!H?xfB*=900@8p2!H?xfB*=*`UG(Q z|LXTKECc}%009sH0T2KI5C8!X009sH0o?z?2S5M>KmY_l00ck)1V8`;KmY_l;MFI< z?*Avw{a32+PldlM{Jij_KniacWSW2%2!H?xfB*=900@8p2!H?xfB*=5mkC^&NXu_u z=-Z@c+Yj4@Lz-IOF^#TH9yfVvQ&ko9Quef5C7SDxGBlUWOBuRfoLzRc4r!8(X0&N8 zMSXKTEnji#4DCjtY5HtM%NkCeqYd3SEvb6 zdS*%XlUTj}=O$Cuw^tPUCr|rQD*S7T{>2LfKmY_l00ck)1V8`;KmY_l00cnbyGcMv z%QteG-Z8rTpLaT>*CINx=XXi>vxSz~nJWBGY9jk_YU=L`zbyQG@>f$on@msqBKvXX zN8{Vljnvnv&hOCh&!@8Vd5Ltq${)9ck3#&X9quC&{ygQ}dc9g{RF%!zyVZ}BVOf>D z5_xUc6kc}L*Egr|hb+Y)*PXK&`K`C4A2`}>n|P0Z*uxMt`gzK$x>32gRaK&rS!cIB zN82*T$`qfSpUld|qV&@ra&`NCVmr+qdC1;v@#?IgQj{sP`JACsLmSmw)w)vKZYZ^# zt*tpFpJR`aln*QQ_1l&Dth%^Z6r|j?P+VFpvNAoQ*=AR1R6lC4OTFLI9K-B3sSEgZ z#MAo@v7@pU)!`7msX5BKv=17a?^jt7_o-1(p;w>xP^lT3!19`o)ohu%*m@@T#N3T# zrH|hZ%wE&50?lRD5~hRpWTG8=Mw>JRG^KKx+s-AH<{U&+xw=}WWr#*vJ+nn@rhfM* zYJ8X;Ghef)=um4nyC&o11MZPeNQ)DWk?&jjAd0S=sMM<))q1tIUcIMy z$@ai9Zf6VmY0}`lA@|)Qp#&e&1Jy^+j94N0PJm4RKhI_5`FZK7%5m`Q7U^{i>WgOAj$h{mC~+y{!qdX3MzFD^ zb=i~cp3~$`7BQnsh)&0YH-MuCvNE0(=VtEuTaop9`+I&T8!nQ1j$Cn9m@V}b2}+2%B?U%Z#i%G1-*vqu~& z>u~lnA%Jw}n$e>Ij6Hhv6MAG7IH@dog<}K-%4Gxzv zhosA*j@2e~edYT{C?C=*ZH+E0z2$`92ywRg;?vvdtUNO#ec9sU!jDe=`?z3`pL&8# z!ZItd0`1ThUO34xF|(y@x&bd3Hojo^OwrL=gC-Hdk*s!qKekFt%Gt;~xy@XSMZ@|d zv!@G96toQ~ zS4(T+lH}xW>Y0(~Q*s^ax1&#EEWPE4vLCV{w~6Bz-TiP$uM>-|B0ABy<-4$D+J+Dk z0>OdV4a21u0Cx>DSaF@y@$Ow})D?Wn)DMbd8Fte=#1D9HHcR|1T|9GoR+VQRqj&Wa z?9QI;|EFGK|KJ4zAOHd&00JNY0w4eaAOHd&00JQJsuEzo|6fRdlREdmQ~#O!=iE?BvI}aQs_A(Q84T7CKT=O(^@Y_YZW&B`R||6?R_Ef_Y;*0V!sTlR1ok(P*hp* z&U8k;GA)t7Qoal2wupWFy+j3(3`{M%^ewpmy^OpxE%ilZ-WCL{jpdaGD-1IQO2edL z?LtPLpOy?!F?&|+Y5o3StzM2mrFUK2c|9Ymvh*;}#~*uhT5RKiUri@eikX;Fo)R1= zD{h^qFy#nLw*-HH&p&=|h)#D`B~a)-@jpKI8g+<^(($dJnUT$ZzKKZtsbfVFFC_Fw zgkg!q!MI4S+2H8FoWhR@gy-WvD`e%R8R=LJ+T(SR?fJHU`Ff%mzQi8{!I?XDK#$t( z%RNt;Q{3I0uvM)gssApxA0t-_fH(%G^ z9i2s@>Ty0XH)J<7I8+xqqY@mQi=_wo#e;}Jb}<>}6X}^r9w-K$XpB%Ba$1G?fAl~M z&L^I9XqAy>YoKAL^Kd?q?f+*Af1N7)cj4dZcL4sf@Hg}VFAx9$5C8!X009sH0T2KI z5C8!X0D+fH;B5NMoMi6pwT&*xL@&mp7wPE5SoGq|Bvp{}6yW^-%kECp4+0)aiIu literal 0 HcmV?d00001 diff --git a/backend/app/utils/database_schema_migration.py b/backend/app/utils/database_schema_migration.py index ef5693b9..6baeb6c9 100644 --- a/backend/app/utils/database_schema_migration.py +++ b/backend/app/utils/database_schema_migration.py @@ -10,13 +10,27 @@ import sqlite3 from datetime import datetime import logging -# Pfad zur App hinzufügen -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +# Pfad zur App hinzufügen - KORRIGIERT +app_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, app_dir) -from config.settings import DATABASE_PATH -from utils.logging_config import get_logger +# Alternative Datenbankpfad-Definition falls Import fehlschlägt +DATABASE_PATH = None +try: + from config.settings import DATABASE_PATH +except ImportError: + # Fallback: Datenbankpfad manuell setzen + DATABASE_PATH = os.path.join(app_dir, "database", "myp.db") + print(f"⚠️ Fallback: Verwende Datenbankpfad: {DATABASE_PATH}") -logger = get_logger("schema_migration") +# Logging-Setup mit Fallback +try: + from utils.logging_config import get_logger + logger = get_logger("schema_migration") +except ImportError: + # Fallback: Standard-Logging + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger("schema_migration") def get_table_columns(cursor, table_name): """Ermittelt alle Spalten einer Tabelle."""