From f640e705d842482c1d146298e5b88e80598dabd1 Mon Sep 17 00:00:00 2001 From: Wolfgang Wiedermann Date: Wed, 25 Jan 2023 10:58:13 +0100 Subject: [PATCH] =?UTF-8?q?Das=20mit=20dem=20Beispielcode=20hat=20sich=20r?= =?UTF-8?q?entiert,=20das=20Testen=20macht=20sichtbar,=20wo=20noch=20konze?= =?UTF-8?q?ptionelle=20Schw=C3=A4chen=20sind.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beispiel.zip | Bin 0 -> 10653 bytes database.db | Bin 12288 -> 12288 bytes excel_file_2.xlsx | Bin 4858 -> 5212 bytes merge_sample.py | 39 ++++++++++++++++++++++++++++++++------- 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 beispiel.zip diff --git a/beispiel.zip b/beispiel.zip new file mode 100644 index 0000000000000000000000000000000000000000..9603d997a849350004fc0d7f31d8701e65bdd6d2 GIT binary patch literal 10653 zcmb7~V{m8hwxHvrqfR=u)3I&aw%M_5+w9o3lV5Dxwrx)Lse9)9=gxeXyWV>D+WX7e zs8y?WJ@v>*f`TCfLH${F^6V-={|-7JAQ&KgAR~Q8eFJ?5V;Um^WhFQuNRiuVL(xC` zZ+3Ep0Rjd)1_c88*WqFrU^B;u4srcfHg5(j}QV~Q!q#22{f=w~Kwm&;Su#Y|@% zAn7m+C-P^$jy0=Vrrjhhwk|&la2#M)=vp9S0NwgHcYF8T7cDEs)^T; zp8LgVuO1hVde8H-%UL9+rIe!ZtJf0Ox75yB4sE0Rc%C^?cUjTkD`$)s>VbiXLUCync9%i9QL0s;s3b5P zYYFZ33oI^1>}@(X2LC!Y@jJN}RBj^uA*7rnBvcY!O5-{3pBjH!Mect$5sKJk zKNsGl-Y0b`ukWF|8|GF<^*r;t9id4P3^rn&*ZB2mu4vVg+xmR_L6}}7_M06`Ewwxi ze0$d9!$WE1$t~n%uEis6xF+(nPI^Er8^wW1xVF|fz+Xs*ID}B`m^ydS!%h3clVSoD zt!C<*6w)xgu|hri1O8K#j<%)Ao8U;1*p!y}Zez_TOvy4-!gUfKMZ?Hh15~+{)<2M%q+b^#uI#<{q^7>>)=z}> z+f3quFj~td4;X#wEb{BD5g?*IHRsT)&++TQb?=?)jc;8WwLqF@9+8AOK}((J&AMX~ z;Amti=CD6YmvCA%AQM>g0F0lx(mCE)aHpu>VR&j6$fLb1QcY;r%U4^e=i1BzQlhbuZ~!j>VoI&ZvY0MtBp_tK_` zn3Pp4OP;$-|Qy#Y!fBcC1(F9GvYm^HY z8rC8zdcyd0Y&?&mA1o%Pu!I9uAc^rRal1Gq~jH^=a7>O8}EBdPd zqIw_R9C2k2L7za8C;=b40ojWi#4HzSDSq_M9ilGOMC$>1@{`TPlEbM55(Qy0Pkdbn zq_H0>b)LQoH{qQ|r5SG@2ScF2H^{BS2xKulyR+78jlO(7m%2)!Ab`i=K>2Y4zM;ZpaRDzhVq ztW+i%vn(o)z9Hm$kn0m_X`9Lh0)0zQDn&tGq5V0z;*|Va%W#?)r#gRMgdaJ+b@&QwM4-w}LfuUR3hDWef-D%}uup-SSe|i$Qy$N%` zRa~PsZGhx5GYg$RXx@C6rOO4}iSd(Yu<4REl;a73Fcho_P#@k(%N+1`g2d{)5#`?O zL*!I`*7r5rOy6hn!OL7R3r^Y3fY6Hd$METjuXPhaZ9s9zuSAI&4*;f z`^hQlS;1$btw9Qpm(K{6|1sA8O$cd5O$=%bF}`)UOdx0Pj9&k6Ps zE|`Pr?$Fx$diNZUjvCh7!af9rClLA0!*!`DOZ-u&>cWjo>8kYonO(U0{u;CkPS1c( z_MKL0%L4<<+K1OET5uzud^nyXIS2v|-tocV%V5n&uTWqeMOz(IJkQx1$g&nNj6bb4 z=RMT0?Y%f<6&^O>+!#B$@K46xT~V-HWY_#9!g^Hc76OAYAwM+rp>E6902JKIkf;&= zOge{l$=u>t#pJ-22m*YUt^53d`=wNX0x8u)FfGy)UfPR1-~s&#+w)#RWD;7jJGg;> z&Z}~-K&I|8wNbLhm*y4ryA}1FBFAu4vMm6{N zc+MjK2c=hcZoTh)v3n(5s3ENVv=x$Y+612%QknB7X{mc*YlzE6^WoIRiaUWZuboi% z0@!kF^NARS5&j-{DK>qU#BsvrZLn07Tls2XI|I7<%yvimLr${Jg>qI|CLrQ$=GNkt z=^Z@T&Kh20sX&O#yJgThW>6?s%^2fWP{sdwCR7iIW@?ASmx#qz;#5vD|si*y+sGY>J7!zCe9i!1R&HCs~qWG0{Fv`@VJ& z*Xv^e74TwV36q;di{lq;Q?@`xyo(xU%5;cP=P)n#c{){GorL}-TTDC+fRe!0D3Q(! z{otn+^9mtZJ8DYr1S{2LK30Z)&@pBd*<}q9*oYVw}blV z6U?Zfd@%(^6L1S5ctXxyok$tsRiP~y@uXi9b~E*koT?5RcK5>CzM3v(XRbZ#zpE-=+|gp?@jkYZYcP^J5!g#>!ua>kvAD!H-|`XwbQE z54qdj=itN*V5~N3@J(!6ovAulqu>8*%z4$M{&bFE^_tz1VG!?YO~7L{c*;;hT&eUo z#-Uurq||isj$F+LaIKQWb1m3n42xR%8@4m2GrZp9NWYi~vRM+V;HXfm#SKbI*)5_s{k0Q|Rrrfyxu{P`c&?s_S=^nXC+b9!^_XU2k`e z3c;V!m0AaV%h`;=ngt2cRnhe6Z#TXHNgmn?3E@5$Pa$S1O3-T@hC}V=aO74`(nvDN z%QV3)fu5K{yy^MW(-&<%gR~zKQQ`w>o>YT>)HNknQks~0`KpLq+zi`#R^F`exsN9P zat4M^&T3+5)5(gqe&n6tct9YK$~>C_(f6DZFo8up73t4XaTD!881)b+ zcXF|JYU;Cv9A3&s6!hDXb+vB z(tYLjU4_b@`YJJLh9hw?m!W8QAmbMJclH$>XR+XQ2kWz!(=PLEjffKH8rrRCcs2@6 z>CR3mWxnZ-d|U^N_P1d0v|8{97W*ME5zM1WMFd5-{Duc!iCS z6?k6vS#CPBY!tmnhP*?>FF`DeA`Ki`sR_(vdeR=P?sG=~hgQaDgVP_AzpI0_M%%|> zfwZ2;(us)HA4d}iKZiy9e{yB(2xq9DdWbBef(nOahPqZdDW$8MC(=DX%;`!3hnm*M z1*6I%CaLP{0*GWgJNRwC5lT<30TVbchW&`QSvb4Rsl_e!h=B5z>nT^=u+ekn?Om}c zz~#ksdGw;4ey4YP(iDs*LOax-A&TfRaA|8x9&*uq0*W8&G@u(LB-D-KE~S2PyHg#& zb8L(dzL~+--V^aZQci-r+hgO3q!|i1`SyJ-3y3qtnZG$L8{#*XI z=h;2_)tyw5C$zO@)}iY&3bSQP*wc3$%(1!86RQl#tt)(&511D7uz&BGqA?_4(lB9c zve_i4;dOh>4yu%Jk&H-3p~M}Bc}Sey`HRKGUzRZz@Ky4oq7Bo;{}`rcx0JDA0%ah4 zO}Nq$;b9yK*$eRi`I5T>wN_*gZL%GKKvM>Rzm~uhy+3o&aD<&L`&W~~6@S{|t9j!Y=X?0e zJ`9BJ^d==EOZVJKKnDQx*Zz-*pgsMy6iw|#+#xG9w<~n7+w1ntqs3`(eS^lWmt+$8 z94w+P^g3Z5YZ*1?G{HtofywE^M0_@sRE`~ojkLh4azYVRZTjw(OIQlbZ=*gQ4tLA& z0xutJH+X|r-M@dbzU%TOmV7x3e&Kk|vF&|;EP}i{&%fcgJA^B|gADY&fAPFMk+J@S zU!avIw*6%C@riLzoD%mA%m4m*Wd7h0`1_aOvm}`Lx=$)dSD(!#hrjN2_RXhij<@KR z5yTCx8O6KLdNBes?D$!AZMF4DxvtjNUD_AOUxu;kgr{nZ00i`xRQ!iwQ2&Ery#DyV z7zV?C7{=lscF}k_ZTL6;KNyD61}X%Ev0gXE$)z=LT)Z4#IzeK*HF|0s0d}zU2@Ux- z6h|mv#MsM3k?o)0{2Bs$V7Sj+&A6|hM}V{S_Q|%hwWmu!SN)Rk&NbR%H z0G^&U2j5ZO`~YS!@^)8?!7gtJkTst`b4Q=y46e<{e&y&{FGLoF+gssdR{E9%Qi1)Q z2qXv`49vAbqL=fV^@emdY17L0sTQ;ySSm=AY{G#pU=%}{t)X(ClUgh*?ERXA9{;jkV5@MDvct)ZIR!JC|;4Z0c=W(a#~78nR59BXWMR4dCyWkx1ELpwbL{v>d1wn74V9)H-qN^cf9z z7WS7b<4$KFRU_@&uJqIAZ%m0hQo(y@ZKNNjPaeM~unKb)-uV-(&J>e>l(O>BooS2H zC!QU!{yx^s+#I<|z?VdzuN2U3Rd;e(rByAJ1JKG;dM=I3#_UqdejJ%{>Dv!$^!mEn0NIA|x!k+(S=@>^q6#Iv#;3)3r(SMq2g#Yg32Mdquz zCltw(>jFG48rt*W+Mui0lwbh}sn^Gm32M`*6ltK7lJdB=FQcmm<#t;acyFT|rUz^K zOyf+3Qw9olAzfwea_yNlHk))5RLyshmb+FtM+U1RhjkZ>AXl~&IxbJj+yOG1ZW+5=oPM4W$;V=|%qo3quBB-nAAQ9VSEh*Z?6Py&q$uV(mma7wpCie>tz~ell-9RFYKUCSp*7(7A zsLH0<*S3&6A0GtxrRY_t!SRq5HzEGg>%$KU9^5TE8mhBSNQwXS9RbnXOmAP(H^EjH z&41iwJ4@ADrAG``L9irv=QP})r&!fOL=N<~IukenY-Yq+e zaStQ`W8Qng1zE7Q7E^v(0QgqP7<2b9PY{QEN_b~L_w}+k|Ag2lk~4gFX6fJ)B*j=^ z5&?I)R9Nro`e=wuvu4$J2-URD)PzQX3egOZU;11^JT|>B5IhX*jW6(RHDbaa`oLXQ zh72j`CZ&T*$YpZr0#S%{60sTCE4wOA>;BM&~A#1m#Dn)4PUrseGd)MA8!AqkI zphX07%N~6E?>KwjX@ja%K@)^G$tx%0#oNysiUdau0IvGtP=EZv#w$vdTLYeN-aG_w zS%Ou!Cl3_C@TZH09vFQ~>@wn(!h=71xjGeX3afuaA9M_d?r>>W4*YC=ZP?kIJ_q+8 zViptwojS`rc;Kx~x$R>9ZfPFoYMQm+M>(j#rGIja$aN(lZ z3YKi0m^QQP%Tr;HQs7kvmk$~5`vd)lf}CvWdpn{ZDQ_If`)cg_WCL^)-EW`|&lb5_ zjrrzocfH5}$?~dvChcd}o`|AijHM>+x^pnYpN+P1&@!cx&{eulb#k2jsJj8%dQ+hy z{(+^U(pYX|iSNmJ*=T-YIa%D%*dK{PdSl&x{soI064syU8L1uT;c-#o+~C^{9A>Jeyj;CX$Q7WM!RB$f%9MmPU^(TEy?@Gbw-j}jX1_O0Ew^C~? z){dqEZPmgTr@Z}>NTnRW=j|CDw#sgIMSyG;Br$cIV(XD`JrdM?!NCSh-jQe@P^dI8 zI43*)P$UxSReyv>0(%%#Q+wX%bMnF(v|@kXf=7XSTtj7^)_r)(J+|x7s=9dI4M(GdeEA zc!a_#wJbV)lJpJPO!d);SQaTxZqJRQ{37r9f=4vlp6<#Ak#*;L9K&>~W7BY?mkjU% zj%t2RC#FX=#uR!IC}Cy+&eWt2F%mct3jic!p3sBM7zq!@aQT)8;fjyXIl?oVWw#>l z>s)xY2FQ~@M9x5Lho|WTqq)u5!j1(isT!`?Tb*Xhr5Fy$aqS!QK}$^Sun=w?4qWyW zvHiL!jfoYwxs$*fk~bcTK_|>%vTHPUPdv|e_MZ&M!$I>ij;S)0IBdo?7z8FF3^u^8 zb;fXMc%jC{>{#=gFzTn6Em@8(QAP+jQIPQjzosa+s99S^xJF3JoQe{QJ_$1Q`{81^ zmdkl}j$ff#6`_^iJT(!f;Z&0` zT)4iNz7gvk=Uwb(RYZlwt39e2E>`O_#I(rVN-InKZ-&Yt9F$nu2-3}|KEjbV~0&pVR{*y0)JH_*NI2Z^_G zLiuw2N|$fds0X_ctc|UpXYaBstcRtz_Xm^XE42fO3^rzEI{!m82^bL+u5!>-@7j`so~ z8x5%rUBLpcA2Xtpt!YQ-=DdtfXugdvqCRxvF*oLJ-GcSp6w}FNKj2lgb1Iudr^ct5 z(`G~rn_1(z!DqfrJc`zey;HnH>D+H|C=dq?pz|Sdb;K87TB!|Nziv1q1WSQ3Ma^6zM&A-YAsidFncsl zx62{;#cVF_D?Bw7Tgeg_Y(M0hz;?AS@YXw;hX*e4_sp^o$aCsyAA2Hqz@e zI=qF^wvuqN7lEKACF}%2RBQ!Oi!!r{ zELzdT^q~4|p4bNkA6mon^f;@fwclr7M6&Rr5h(t{Ert)U(})nz$VVfULs)eyCJpP} zDw9q{Y(R77Q63YXALFZ>mDkI@b0UE+x3o-o)(9UK)GZASQN^q*ChAriic_*i-SeO4Wig)e}K2;yO#g2YNW~r*$QEv@Pmz46HLN@Y8Bd zA>mdjDHzp7Vo?r|8C~zJT3g1 zeqDRXbP0oe(5MW_UWj)U4QS)BUkTn;lb6&x`Re9b!eyV@YyYFPM^@j-n8iooSrf1V z44EC1GBCY_*V|*;d*sO3Q9g&p)Ic}yxt%EYDjC~9AM~s9>d8Nu+%Ox>g%X8QTWcp{WN)7w&W8J zkE)v5((lSwWNDX~(v))uzji@Nj9-+c73}!Q?*=KE;Vxw$+H_&o_C&Fc2_p~+obwfd z_Nsnl*caUvPaL(G5xBL3Rsj^6#FQH!?&y3)p{(6P$Y>=hGJS4Jfm@As%!Bz5!!wP# zR5^9XMobGBzC)T-HkstXXpKSITI7fEyF|%o5P}{z`bN>x=_;y8MiB~b^;~LF&stY9 zyK2)mOGfd7k17H1xapwNGoy))2I=I2QxiKEo<(sGg2mCAa{3lD2>Y!(stCw3A*n9+ zW4T#Wi(X14t@c`{^H781{n-q8d~4NFE5Ne6mnJqTGuY#ES*uqIKAnrd!q_T?#;lEQ zhasB1hpF*fTTePgIz6|(dukqTt zudc_+;csC)1CM=R=C6*&#_?ak;XuCjID*P_THSBZzuptszjpnzuinxAQVT3|g+SFm z)Z#Cj_z$(n{fEAD1qB53{f~KJWo&P1tm~j}Wov0nW9#-W?;`7uy7TY--`ty}bo96S5Xx1wL~9(beTX!)+!g7`~7{}!| z8*KaHF@j7(E2_Ce?)!$;QL;8{QUMcw?u0V`T_+|LO`EL}6LsA)If1_TF&4e5Qd$wN z-1D!?*43mJ`b<69m2cSP@@zR~AB19!%uV#Mzf3n(kPO7k1~*X zMvD8U+QA%ky0GV3_HrM44zp5+meW;xR_Ui{YPUOx4C*n((3PxD=Z{|cRwUuTmI7>4 zbjT-M(nW^4iQVeP)MraF+*(wD_uvPWsJ%@KRoW6F z+SiQIkKW*2|AUy{fr*vc7C=!)wYJvmLHiwrb2*_cydNPn?-#5v7iz*ngCK+cM+*F>>Gf9% z{C5=i{XP31D1!ei{8tqFCw~1aiv2qp{DeV({^#1*Kg<7Rxc{7!|7ZEXy!Rhg+W#NX s{b%{V!}gz_?C-GscQp8Q5dr;AN3WbDIK173nL>VGbb~fIFP}~%)uuHq}iF-?Z2D>fwR1VER3A&%rGvWC|H`+fhi3P*hRql zS(w>`!TOo`gun`zU>f*;F|ac*Ft7`N)G-0=;RmT>;^5;0shb=xzm!>m-)Azr0?>sm z{5AX~{5kw7{4x9?{60VzityXBgETU8N$2 diff --git a/excel_file_2.xlsx b/excel_file_2.xlsx index 3887b6b30f41c21eaac96312ebefcf816f4f0c09..93bf643d68848099856a212f5d03208d46c0fccb 100644 GIT binary patch delta 3432 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 J_u^lR{|kZZZN~rr diff --git a/merge_sample.py b/merge_sample.py index e098c72..f1703e5 100644 --- a/merge_sample.py +++ b/merge_sample.py @@ -1,3 +1,12 @@ +# +# Voraussetzungen: +# +# pip install xlrd +# pip install sqlite3 +# +# oder unter z. B. Ubuntu: apt install python3-xlrd python3-sqlite3 +# + import xlrd import sqlite3 @@ -31,20 +40,36 @@ def is_already_set(con, pruefung_id, mtknr): return result >= 1 +def is_valid_value(pruefung_id, note): + # todo, ggf. auf der Basis der Notengebungsart etc. prüfen + return note is not None and note in [1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4, 5] + + +def is_modified(con, pruefung_id, mtknr, note): + sql = "select count(*) as anzahl from pruefungsergebnis where pruefung_id = ? and mtknr = ? and note = ?" + cur = con.cursor() + cur.execute(sql, (pruefung_id, mtknr, note)) + result = cur.fetchone()[0] + return result == 0 + + def merge_data(pruefung_id, 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") + if is_already_set(con, pruefung_id, mtknr): + if is_valid_value(pruefung_id, note) and is_modified(con, pruefung_id, mtknr, note): + 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"wird nicht geändert") + print(f"Note zu {mtknr} wird nicht geändert, da Notenwert unverändert, Zeile leer oder ungültig") else: print(f"Mtknr: {mtknr} Note: {note}") # im Falle von HISinOne wegen bereits bestehendem Anmeldesatz auch Update, so aber