Siasztok,
egy php-s kódomat alakítom át python-ra. Az sql parancsokat előre össze szoktam állítani.
Most így próbáltam:
sql="UPDATE job \
set type='%s' , \
completed_savetime='%s', \
completion_status='%s%, \
data_class='%s', \
data_set_size='%s', \
data_size='%s', \
end_time='%s', \
estimated_bytes='%s', \
file_count='%s', \
files_totals='%s', \
host='%s', \
job_state='%s', \
level='%s', \
name='%s', \
nw_client_name_id='%s', \
processed_bytes='%s', \
saveset_name='%s', \
saveset_time='%s', \
ssid='%s', \
start_time='%s', \
vcenter_hostname='%s', \
vm_guest_os='%s', \
vm_name='%s', \
vm_uuid='%s', \
where job_id=%s and torolve=0" % (\
tipus,completed_savetime,completion_status,data_class,
data_set_size,data_size,end_time,estimated_bytes,
file_count,files_totals,host,job_state,level,name,
nw_client_name_id,processed_bytes,saveset_name,saveset_time,
ssid,start_time,vcenter_hostname,vm_guest_os,vm_name,
vm_uuid, job_id, kornyezet)
Az utolsó sorra ezt írja:
ValueError: unsupported format character ',' (0x2c) at index 134
Nem értem, hogy hol a hiba. Több másik lekérdezésem is van, ugyan ilyen tördeléssel.
Hozzászólások
Nem beszélek pythont, de ez ránézésre érdekes:
completion_status='%s%, \
(mert hogy mindenhol máshol '%s' van
És az alábbi sor is érdekes:
where job_id=%s and torolve=0" % (\
De egyébként az index 134 sokat segít.
Ha nem válaszolnék kommentben, hát küldj privátot!
Köszönöm, a % jelet cseréltem ' jelre. Megoldódott. Köszönöm :)
Off: a szerkesztőd nem jelezte valami színnel, hogy egy aposztróf nincs lezárva?
itt van a kutya elásva :)
Nem értek Pythonhoz, nem tudom milyen adatbázist használsz és hogyan hívod, de azt tudom, hogy rosszul csinálod. Kérlek nézz utána hogyan kell az általad használt megoldással paraméterezett lekérdezéseket futtatni. Lásd: https://stackoverflow.com/questions/902408/how-to-use-variables-in-sql-…
Bobby Tables... https://xkcd.com/327/
Én azt hittem, az SQL injection már olyan régi, hogy mindenki ismeri, és kihalt.
Szerintem a kérdezőnek legalább ezt el kéne olvasni, mielőtt az egész kódját átalakítja ilyen sechole-sinkre:
https://realpython.com/prevent-python-sql-injection/
Az SQL injection olyan regi, hogy mar mindenki elfelejtette, hogy vedekezni kellene ellene. Mint a kanyaro.
> vm_uuid='%s', \
> where job_id=%s ..
Az a rész is gyanús ahol vessző kerül a where elé.
Szerk: öröm lehet ilyen kódot karbantartani.
Ilyen sok paramétert tartalmazó stringnél érdemes a format metódust használni nevesített értékekkel.
https://www.w3schools.com/python/ref_string_format.asp
Akkor már (ha nem kell régebbi python) inkább f stringet.
Sziasztok!
Köszönöm a tanácsokat, újra gondoltam több mindent.
Át is írtam több elgondolást.