Open PavesicL opened 7 years ago
executemany
deluje na isti način kot execute
, le da dovoli izvajanje več SQL stavkov - vsi morajo biti podani v vhodnem nizu. Drugi argument mora biti seznam ali terica vrednosti, ki nadomestijo vsak %s
.
V vajinem primeru bo najlažje, če gresta kar z zanko for skozi seznam in vsakič naredita po en ukaz SQL:
for i in seznam_krajev:
cur.execute("""INSERT INTO kraj (ime) VALUES (%s)""", [i])
Mimogrede, nima smisla, da v skripti za uvoz uvažata bottle
, saj ne potrebujeta spletnega strežnika. Bolj smiselno bo morda, da za posamezne dele uvoza naredita funkcije, ki jih lahko po potrebi kličeta. Svetujem tudi, da pri uvozu odstranita autocommit - potem na koncu uvoza (če je vse šlo, kot je moralo) naredita še conn.commit()
. Za uvoz se bosta morala prijaviti s svojima računoma, zato uvozita auth
, ne auth_public
(tega bosta uvozila v sami aplikaciji).
Če prav razumem zadnji odstavek, naj bo datoteka v kateri je geslo in ime za dostop do baze imenovana auth.py? Do zdaj je pri nama to auth_public.py - ne vem točno zakaj, saj imava v aplikaciji import auth_public as auth
.
Tako, ja - auth_public.py
je namenjena "javnim" podatkom za dostop, auth.py
pa zasebnim.
import auth_public as auth
pomeni, da uvozita program auth_public.py
v modul auth
- tako do njegovih spremenljivk dostopata z auth.db
, auth.host
itd. V glavnem programu je seveda smiselno, da uvažata auth_public
, saj želita, da lahko vajino aplikacijo uporablja kdorkoli. V programu za ustvarjanje baze in uvoz podatkov pa uvozita auth
, saj uporabnik javnost
ne bo imel zadostnih pravic za to (in bosta ta program poganjala le sama).
V SQL_insert.py sem poskusil uporabit ukaz executemany namesto for zanke po execute, pa se zgodi napaka: TypeError: not all arguments converted during string formatting. U googlanjem nisem uspel odkrit kaj je narobe.