From 91dcece815a3f321269eef48ec27003dc5130099 Mon Sep 17 00:00:00 2001 From: Wolfgang Wiedermann Date: Wed, 25 Jan 2023 10:00:02 +0100 Subject: [PATCH] Ausgangszustand Beispiel --- database.db | Bin 0 -> 12288 bytes excel_file_1.xlsx | Bin 0 -> 4873 bytes excel_file_2.xlsx | Bin 0 -> 4858 bytes merge_sample.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 database.db create mode 100644 excel_file_1.xlsx create mode 100644 excel_file_2.xlsx create mode 100644 merge_sample.py diff --git a/database.db b/database.db new file mode 100644 index 0000000000000000000000000000000000000000..841c50d8ee1e974657ef963bb7e3606c56603a45 GIT binary patch literal 12288 zcmeI$Jxjwt7zgmX%expJx2`u@C|29M=N3nC&l6aK>F`J50{YNmRnm{P6{R4-MrH*}L75o}Mb%Qrk(VnNH4DX37bgCOD2tWV=5P$##AOHafKmY;| zfB*#kPQVY{i1Wzt0-aG9`#OSP?&ZqV^*DE<=yMf&X6Vg}wk_W^TV2O<%vL8BW-5kT z^(**{jp+#KlF>W8&@(;KJ>AlcZlE9l0SG_<0uX=z1Rwwb2tWV=5cr1z=3qb{5ZDL< V8-Z`b^K7`T4acz|ggzaJq7Ua7i3tDz literal 0 HcmV?d00001 diff --git a/excel_file_1.xlsx b/excel_file_1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..32fc02578d4faebd343fa4a9961539860fefe0d3 GIT binary patch literal 4873 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 literal 0 HcmV?d00001 diff --git a/excel_file_2.xlsx b/excel_file_2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3887b6b30f41c21eaac96312ebefcf816f4f0c09 GIT binary patch literal 4858 zcmaJ_2Q-}B*2YK-Lq_!8dk-R7f&|fxl4#L8!wjQjj7|`}w`ft4kc<)}LG<1dUGS+P zM2`|g@XzGC|K;Z1eEVHf&RXw2XPv#Dv!7=lh&lkD0tW~L;t0x1-N(6LAk2SrcUvez zSP1)#PW-3_xJDYjc886 z<4)!@ncaS5*4;>DScx%zbnH(WR6*{QgEjhkXM=wB5BJqLz}7t_BW=(PU1;g4d^xoA z6e0Bvs2q3tK2h^)ufu55Ah&}Y4n&;*Xjc;ab`G;`89W@!_)mcWW8Qd(Sp(+oYz2ck z3q5p!#^`msPKl7#AMoSPxCoj#(We3oV&ie9NuPITBq~!mM^bcsOU*xLP`h;Kqa$Ww z(^R(bm=ECVJnQnrDzR-d_wy^D)dG(~pO>=6-RQSBBi{(^%{qE%Flio>_RTlILANK? zsJrNrQ`OLO;R)}q1nC7`(Xu()#9NEpPZVSDw z8Px3{?w>b~iOBCdqnvmX;x+$FyEa~(`Sg$^iz=uAOhL{YL7fH@t31K6%?Cp_1Ql-YP;Hq-|>3P!t1t60e zWVo#GsilQh&e&u2WoqHGU2~sAHn9QTuE&p&1ngGdKc9$aa#cEtM~uxokcPcYY7QTK zD5?S*PF7BXCL(_%g)Tv;_c$2+qQXuS33%R88*kQ-PfY6U@V-RJ*!h<|9u>x-Mg;i7 z`v?~Y2M+ir)R6p*8iWTDYKy>PX2VchdrE|%eoN1=A&!HSB7KOZW5h9yFoum)QzpGl zRp2N0Yg32Ay<;h@;m{T?&v43O?kVBMgP%L=FT9eXQs!0?oLZB!=2v*yB6>8IG*ZQU z>(T>cTe}R|5G^T%Vt+wGgonV7D@dN-pe&*a3Kkc8U}O?NgqL(rpA=E(#5b?{w2Fl) ztd>{<&D$NrPROLu0;dDEaA=X&P#`QxdPa1O%Lngt-I#U9d45gVY*TH?Vu?RRpFB21 zoKQMQoHzNem9|d+N2{Dc_IVbvT6b0a{m<(C?{6#Me~uyGMi+8#%7YKWW+a3tI*`mg z_$U@lCo92G_bY&reQHgTZZ$(E;o-59qS}$d$6VZi+fz;N57d^+tHXL%S(C+d`BV>G zZnj>U4_jdRk)N|jr$Md-0<~nOq&TBX0Nhq+vH>H+Un6EUTTOekOFug{hU=_$zq3Y^ zMsE0VPT@iWmh0Diid^MaGjAZ46knMQT{-+KH9AlIgBtHjREslOpdWgiQ4P8%0U~q(J|$MxP-M#mojZV<%19 zvAwL}tK6sL_Tu9c5#B%OwlY_V$MT+M#qpf3))A6le$se%Xcmj!XzehH5KO(ZzWPt- zr8%#82nSnR4}|cqpKDkk*WcHKO-Yj0ZQ6VR5h-h*IzhSB^`@N&frUnN~(RC-1800;gTkXAGPkwqS8}>iN;doz_03 z!@#mEM$P53CL8zz_QuP{lBM##imcmqo{VRr`mZD$8a~F) zlc>7@9J^h6@zn(irv09@5Xsscr*FxN<0Kaql8)&#eU=~p4iGg99qQ&KB}J*wnf9!?E;8F2+&ASTHMe=@={R=UVNuM_33&v|nj}VQDpw{=*hu7l zpvx}jW6l_6m>$0B|4G|0W>WVnxM<+UdJ}#J>b5C;4&)24&=MUJ(CU>u_plENRKZT!MhfhYEVlwH+nb_%TCtQIJJU1jQlcC%TKki z&9nt$w{;?+gxbq!PTY1=O>V6yU3B$0PoAu1h1QVI&r~~?8OV?Er}h24G(3Xbr#mFw zqjf1~Ctpyw-=}XjT-Sg{ZAE;HCqG&qYvj2uSbqyHx*t%w@S@!{uZ}cTGofMYij0b!s@wKPJvLp|R7s zt_HOv&G0ft(1;+-mI#Zbmmegi@%1Y0>JJ>qvZ&E{PKncJ`*J{7KXOnRL&VyrqL0hG z!V1K4A2Vv-8d;ibHrxaXb*DrQE=2q51*r4{%R$D6H!op#T8;D)d4bu-4(9V`3}E;J z#|CB%afiVX!qzZ%+h4+1*HpVjgu?H@K)`RdmV|Wx%C57hN=AN-Zq^A!JBoImY?+&# za)IXU%uU@q$jUh$wejZx!N8LdYR`CxZZ8JeP*RI(5BB@7 zi6|Ks&8r#^RZ&{V+H;Ut@+p}(Q#OAp7fc?(*J5R?DfUoBhe&ruz81~|#J0kN)ytFh z)ZMICUN&FN7LcMB7}cUi zP5Q-M^vFK*{M*sb2$>RLn@YaRJnC98q|btk=W@hYOlxwGjMKtn>dEbvvOBF^ah+>$ zwGJ_N`g-oe@#Bv2DE{p0>$LCELoAJX)?7a&$dO&4*8d{&b~`$x@u36fof0Wqg&5PC z0vP^wUBT|V#5EZ{?V5mCadu0^h37Fx4ZS0d(3=*j zfuiH>j{$uRxY!)|jP=IbVnpcFKcbQJVva1~aBPaQ<27L|*wcATd9STn)8tJsgs#eQ zlF(7c!{IHT`h%`yVNPDYGk;w1IoaIx@iFUT&NbDS>o~VmoQ?GbEp9UieeXC`*O3&bhXA-FB*<; zgWkI&Tnn`V^u&7j?DC77M2gf4tE6Wj%GBIV(A4G%SzO|kDm?)_&cjqM3DHqik}9>G zYL<^5c)N`>Vh3V=e&6;t3!-j+Z%DBZW$%~VH}8E0W2&qRx>dgokX=AZp=gW9keb^! z*A-{XUOgMt(|INd{^^K6`=F>18@7;;<@6&=P%<&0`!lr3F>jdMfw_9vx_X%FBjL6P z(_g|zUq-uCgmmVZpRJ6?t2dBTZ8E46n8G6_`i=8i4D;*hp;OccUj2K7yb%%IueTb~ zw7n#zUT_(O><+DDX{@Ak-l+?BL#2DDOhC7q%{CCa;TB~yyGkUHC?^4j zSIHf`Oz<^6J7mQoW%=&6!(d8ff&o^Ngba!tRaBao)8+?(Y3kVYQ`Dlc}y? z0)a|H+iXdKm@VAWYDxDrf60OfD9Tq5Eq83zyt=9)Uy?46&{$QTr)N!xj%at~3_+bM;9Lp{(Y8;Ack5dRMr_}%^Dsl%3}a~r_~_TMD(uLAYE_eEr2Pv*ISFgg7n=M= 1 + + +def merge_data(new_data): + update_sql = "update pruefungsergebnis set note = ? where pruefung_id = ? and mtknr = ?" + insert_sql = "insert into pruefungsergebnis (pruefung_id, mtknr, note) values (?, ?, ?)" + with con: # Transaktionsscope: Fehler führt zuverlässig zum Verwerfen aller Änderungen aus einer Excel-Datei + for mtknr in new_data.keys(): + note = new_data[mtknr] + if is_already_set(con, PRUEFUNG_ID, mtknr): + print(f"Wollen Sie die Note zu {mtknr} auf {note} aktualisieren? (j/n)") + answer = input() + if answer == 'j': + con.execute(update_sql, (note, PRUEFUNG_ID, mtknr)) + print(f"angepasst") + else: + print(f"wird nicht geändert") + else: + print(f"Mtknr: {mtknr} Note: {note}") + # im Falle von HISinOne wegen bereits bestehendem Anmeldesatz auch Update, so aber + # einfacher im Beispiel darzustellen... + con.execute(insert_sql, (PRUEFUNG_ID, mtknr, note)) + + + +f1 = read_file("excel_file_1.xlsx") +merge_data(f1) + +f2 = read_file("excel_file_2.xlsx") +merge_data(f2)