Avatar billede molehonter Mester
14. april 2023 - 13:32 Der er 7 kommentarer og
1 løsning

SQL fejl

Jeg får en fejl i SQL delen af dette stykke kode, resten virker. Hvad er der galt.

def mainRate_v1(base_currency):
    # Define the API endpoint and parameters
    api_endpoint = "https://openexchangerates.org/api/latest.json"
    params = {"app_id": '****', "base": base_currency}

    # Send a GET request to the API endpoint and parse the JSON response
    response = requests.get(api_endpoint, params=params)
    exchange_rates = response.json()["rates"]

    # Connect to the Access database
    conn_str = (
      r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
      r'DBQ=C:\Users\peter\OneDrive\Investering\Aktiver_Etoro.accdb;'
    )
    cnxn = pyodbc.connect(conn_str)
    cursor = cnxn.cursor()

    # Define the INSERT INTO statement

    # Loop through the exchange rates and insert them into the database
    for currency, rate in exchange_rates.items():
        # Execute the SQL statement with the values
        cursor.execute("INSERT INTO ExchangeRates (Currency, Rate, base_currency) VALUES (?, ?, ?)", (currency, rate, base_currency))
        # currency, base_currency text field
        # rate is double feild

    # Commit the changes and close the database connection
    cnxn.commit()
    cursor.close()
    cnxn.close()
Avatar billede michael_stim Ekspert
14. april 2023 - 13:37 #1
cursor.execute("INSERT INTO ExchangeRates (Currency, Rate, base_currency)
Base_currency - måske?

Eksisterer varablerne?
Avatar billede molehonter Mester
14. april 2023 - 13:52 #2
Ja de findes, jeg prøver lige alle parameter
Avatar billede michael_stim Ekspert
14. april 2023 - 14:51 #3
Kig også på dit kolonnenavn. De andre starter med stort bogstav, men ikke base_currency.
Avatar billede arne_v Ekspert
14. april 2023 - 14:59 #4
Hvad er den præcise fejl besked?
Avatar billede molehonter Mester
14. april 2023 - 16:39 #5
Her fejl meddelsen, jeg plejer normalt ikke have bøvl med SQL i Pyton men det driller.

  Message=('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Der er en syntaksfejl i INSERT INTO-sætningen. (-3502) (SQLExecDirectW)')
  Source=C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\getrate.py
  StackTrace:
  File "C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\getrate.py", line 31, in mainRate_v1
    cursor.execute("INSERT INTO ExchangeRates (Currency, Rate, base_currency) VALUES (?, ?, ?)", (currency, Rate, base_currency))
  File "C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\getrate.py", line 78, in <module> (Current frame)
    mainRate_v1("USD")
Avatar billede arne_v Ekspert
14. april 2023 - 16:57 #6
Er Currency et reserveret ord i MS Access?
Avatar billede arne_v Ekspert
14. april 2023 - 16:59 #7
Prøv evt. med:

cursor.execute("INSERT INTO ExchangeRates ([Currency], Rate, base_currency) VALUES (?, ?, ?)", (currency, rate, base_currency))
Avatar billede molehonter Mester
14. april 2023 - 17:04 #8
Nu lykkes det jeg har oprettet en ny tabel i Access, nye tabel navne det kan skyldtes at nogle af de bavne jeg har brug kan have været reserveret i Pyton eller Access

    for Currency, Rate in exchange_rates.items():
        # Execute the SQL statement with the values
        cursor.execute("INSERT INTO Valuta (Valuta_Currency, Valuta_Rate, Valuta_Base_currency) VALUES (?, ?, ?)", (Currency, Rate, Base_currency))
        #cursor.execute("""INSERT INTO ExchangeRates (Currency, Rate, base_currency) VALUES (?, ?, ?)""", 'ABC', 10, 'USD')
        # currency, base_currency text field
        # rate is double field
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester