[PYTHON] Hulp nodig script

Hi all,

Ik ben nieuw op dit forum, en ik heb een probleempje bij het scripten.
Hopelijk kunnen jullie mij hierbij helpen!

Het wilt bij mij gewoon niet werken..

code:


#Paramters
import pymysql
import json
import requests
import datetime

#Parameters:
api_url = "https://my.api.mockaroo.com/"

host = "localhost"
username = "x"
password = "x"
database = "bimbdk89"

# get 50 rows of data from API
response = requests.get(api_url)
print("API response status: " + str(response.status_code))
# return_code 200 is ok, codes die beginnen met 30, 40 of 50 zijn errors
processed_response = response.json()
# connecting to database
db = pymysql.connect(host, username, password, database)
# prepare a cursor object for temporary results
cursor = db.cursor()

def convert_to_mysql_date (input_date):
  if not input_date:
 return "NULL"
  else:
 return (
 datetime.datetime.strptime(input_date, 
 "%m/%d/%Y").date().strftime("%Y/%m/%d")
)

for purchase in processed_response:
 purchase_date = datetime.date (2019, 1, 1)
 date = datetime

#check if values are None, then continue
 if purchase_date == None:
 continue

#select all from dimension date
 cursor.execute("""
 SELECT * from dim_datum
 WHERE purchase_date = '"""+purchase_date+"""'
""")
 resultcount = cursor.rowcount
 if resultcount == 0:

#insert into SQL
 sql = """
 INSERT INTO dim_datum (purchase_date)
 VALUES ('"""+purchase_date+"""')
"""
#execute
 try:
 cursor.execute(sql)
 db.commit()
 except:
 db.rollback()
 db.close()

Mvg,

Kirsten :)

De bedoeling is eigenlijk dat je er bij zet wat er precies niet werkt en wat je zelf geconstateerd hebt.

ps, als je je code tussen code-tags zet dan wordt het goed leesbaar (click 'UBB-code' boven je bericht).

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Inderdaad. Python is hier ten huize courant, maar wat er nu staat kan ik maar met moeite lezen, zeker in python waar bv. indentatie bij de syntax behoort.

Post aub foutmeldingen en dergelijke, knippen/plakken is nu toch niet zo moeilijk.

Ook is het niet super-slim, ietwat onhygiënisch, om login en paswoord zomaar publiekelijk te posten. Wie weet welke vunzigaard (v/m/x) weet daar misbruik van te maken...

Enne, ik zou het haast vergeten, welgekomen alhier! Het stemt me ook sympathiek dat ik niet blijkbaar de enige ben die commentaren in diverse talen doorelkaar haspelt in de code :)

Nu, waar ik lees

code:


if not input_date:
 return "NULL"
e_l_s_e_:
 return (datetime.datetime.strptime(input_date, "%m/%d/%Y").date().strftime("%Y/%m/%d")
)

daar ontbreekt er toch een "else:" ? (ik probeerde het er zo opvallend mogelijk tusen te voegen)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 11 juni 2021 19:00:48 schreef flipflop:
De bedoeling is eigenlijk dat je er bij zet wat er precies niet werkt en wat je zelf geconstateerd hebt.

ps, als je je code tussen code-tags zet dan wordt het goed leesbaar (click 'UBB-code' boven je bericht).

Thanks! Er word iets geblokt... IndentationError: expected an indented block

Op 11 juni 2021 19:03:18 schreef big_fat_mama:
Inderdaad. Python is hier ten huize courant, maar wat er nu staat kan ik maar met moeite lezen, zeker in python waar bv. indentatie bij de syntax behoort.

Post aub foutmeldingen en dergelijke, knippen/plakken is nu toch niet zo moeilijk.

Ook is het niet super-slim, ietwat onhygiënisch, om login en paswoord zomaar publiekelijk te posten. Wie weet welke vunzigaard (v/m/x) weet daar misbruik van te maken...

Enne, ik zou het haast vergeten, welgekomen alhier! Het stemt me ook sympathiek dat ik niet blijkbaar de enige ben die commentaren in diverse talen doorelkaar haspelt in de code :)

Nu, waar ik lees

code:


if not input_date:
 return "NULL"
e_l_s_e_:
 return (datetime.datetime.strptime(input_date, "%m/%d/%Y").date().strftime("%Y/%m/%d")
)

daar ontbreekt er toch een "else:" ? (ik probeerde het er zo opvallend mogelijk tusen te voegen)

Haha, ik heb dat meteen geprobeerd but no luck :(. IndentationError: expected an indented block krijg ik te zien..

De huidige knip/plak laat alle indentatie weg, zo zien we het niet he.

Bv. dit kan niet werken en zal aanleiding geven tot zo'n melding:

code:


for purchase in processed_response:

purchase_date = datetime.date (2019, 1, 1)
date = datetime

Correct (ofschoon nog steeds weinig elegant :) ) ware

code:


for purchase in processed_response:
 purchase_date = datetime.date (2019, 1, 1)
 date = datetime
hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 11 juni 2021 19:23:02 schreef big_fat_mama:
De huidige knip/plak laat alle indentatie weg, zo zien we het niet he.

Bv. dit kan niet werken en zal aanleiding geven tot zo'n melding:

code:


for purchase in processed_response:

purchase_date = datetime.date (2019, 1, 1)
date = datetime

Correct (ofschoon nog steeds weinig elegant :) ) ware

code:


for purchase in processed_response:
 purchase_date = datetime.date (2019, 1, 1)
 date = datetime

Haha! Begrijpelijk, heb het meteen wat netter gezet ;). Het blijft lastig!

Er zijn nog steeds volop indentatiefouten.
Ook snap ik niet waarom er regelmatig

code:

"""

-blokken staan, dat is toch commentaar en wordt dus niet uitgevoerd?

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

In Python gaat die indentation niet door bv een "begin" statement of een { zoals in C. Dit gaat door spaties. Als je dus een error krijgt, dan heb je ergens die indent niet staan waar ie het wel verwacht, bv na een if-statement of zo.
Bij mijn weten kreeg je toch ook nog een regelnummer te zien bij de foutmelding?

ps, het was ooit zo dat je geen tab en spaties door elkaar mag gebruiken als indent. Je moet kiezen. Mogelijk is dat inmiddels anders, maar sowieso is het een goed idee om het niet te mixen. Ik zeg: 2 spaties.

[Bericht gewijzigd door flipflop op 11 juni 2021 19:37:09 (25%)]

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Op 11 juni 2021 19:33:00 schreef big_fat_mama:
Er zijn nog steeds volop indentatiefouten.
Ook snap ik niet waarom er regelmatig

code:

"""

-blokken staan, dat is toch commentaar en wordt dus niet uitgevoerd?

Lastig voor mij te beantwoorden, ik ben nog een "noob". Dus eigenlijk probeer ik het nog een klein beetje uit.. haha. Alleen lijkt het alsof het bij date het gewoon niet wilt doen.

Op 11 juni 2021 19:35:17 schreef flipflop:
In Python gaat die indentation niet door bv een "begin" statement of een { zoals in C. Dit gaat door spaties. Als je dus een error krijgt, dan heb je ergens die indent niet staan waar ie het wel verwacht, bv na een if-statement of zo.
Bij mijn weten kreeg je toch ook nog een regelnummer te zien bij de foutmelding?

ps, het was ooit zo dat je geen tab en spaties door elkaar mag gebruiken als indent. Je moet kiezen. Mogelijk is dat inmiddels anders, maar sowieso is het een goed idee om het niet te mixen. Ik zeg: 2 spaties.

Haha, duidelijk. Dus alles moet 100% correct staan..

ik ben nog een "noob"

Ok, moet kunnen, maar ik vind dat we dan wel mogen overgaan in de modus "schoolvragen". M.a.w. toon veel meer eigen inzet. Verwacht vooral niet dat we hier een beginster bij het handje gaan vatten en begeleiden tot de boel werkt.

Alleen lijkt het alsof het bij date het gewoon niet wilt doen.

Die zin klopt niet: "gewoon" is dat het wel werkt.

Bij mijn weten kreeg je toch ook nog een regelnummer te zien bij de foutmelding?

Inderdaad, en met die info wordt blijkbaar niets gedaan, totnogtoe. Foei!

Slotbedenking: ik mis ook de shebang als eerste regel? Bv.

code:

#!/usr/bin/env python3
hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

het lastige is dat je in python meerdere strings hebt.

c code:

x = b"dit is een bytes object"

y = "dit is een gewone tekststring"

z = """ Dit is een tekst string die 
meerdere regels
mag omvatten
"""

"""
dit is ook een tekststring, maar omdat ik er niets mee doe
wordt het door python
als commentaar gezien"""

print(x,y,z)
print(type(x))
print(type(y))
print(type(z))

als ik dit uitvoer krijg ik dit:

code:

user@pcthijs:~/Documenten/python$ python3 test.py 
b'dit is een bytes object' dit is een gewone tekststring  Dit is een tekst string die 
meerdere regels
mag omvatten

<class 'bytes'>
<class 'str'>
<class 'str'>

c code:

print("Dit is goed")
    print("dit is fout")

dit geeft:

c code:

user@pcthijs:~/Documenten/python$ python3 test.py 
  File "test.py", line 2
    print("dit is fout")
    ^
IndentationError: unexpected indent

je ziet hier dat ik een verkeerde ident ("inspringing") hebt. in theorie staan alle regels onder elkaar, tenzij je een regel eindigt met een dubbele punt. alle regels die in dezelfde kolom beginnen horen bij hetzelfde 'blok'.

het helpt dus als je de volledige foutomschrijving plaatst..

GMT+1

Over indents: in onderstaand stukje zie je gelijk al dat het niet klopt. Onder het if statement wordt niet ingesprongen.

code:


def convert_to_mysql_date (input_date):
  if not input_date:
 return "NULL"
  else:
 return (
 datetime.datetime.strptime(input_date, 
 "%m/%d/%Y").date().strftime("%Y/%m/%d")
)

Maar nogmaals, kijk gewoon naar de foutmelding, daar wordt redelijk precies aangegeven op welk punt het fout gaat. Wij kunnen tips geven, maar debuggen moet je toch echt zelf doen.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein