Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: python3 en SQLite probleempje  (gelezen 161 keer)

Offline BaukeP

  • Lid
python3 en SQLite probleempje
« Gepost op: 2023/01/23, 16:18:39 »
Hallo dames en heren,
Ik heb de volgende regel in mijn python code, en dat werkt:
c.execute("INSERT OR REPLACE INTO coins1hr(datum, tijd, naam, O, H, L, C, usdeur) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (list[0], list[1], list[2], list[3], list[4], list[5], list[6], list[7]))

Maar ik wil een variabele gebruiken voor de tabelnaam (coins1hr wordt dan db3table). Ik lees in de sqlite docs dat dat een vraagteken en een tuple zou moeten. Dus zo ongeveer:
 c.execute("INSERT OR REPLACE INTO ?(datum, tijd, naam, O, H, L, C, usdeur) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (list[0], list[1], list[2], list[3], list[4], list[5], list[6], list[7]), (db3table,))

Bij het uitvoeren krijg ik de volgende melding:
c.execute("INSERT OR REPLACE INTO ?(datum, tijd, naam, O, H, L, C, usdeur) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (list[0], list[1], list[2], list[3], list[4], list[5], list[6], list[7]), (db3table,))
TypeError: execute expected at most 2 arguments, got 3

Ik heb geprobeerd het laatste stukje te verplaatsen, maar dat geeft geen oplossing.

Wie is hier mee bekend en kan mij helpen?
Alvast bedankt
Bauke

Re: python3 en SQLite probleempje
« Reactie #1 Gepost op: 2023/01/23, 20:39:08 »
Je kan denk ik geen parameter gebruiken voor een tabelnaam in SQLite. Zie: https://stackoverflow.com/a/39196510

Misschien is dat dan iets om in de zelf in de querytekst in de te vullen met string formatting. Ideaal gezien doe je in SQL zoveel mogelijk met parameters en zo weinig mogelijk door met strings te rommelen maar soms kan het niet anders.

Re: python3 en SQLite probleempje
« Reactie #2 Gepost op: 2023/01/28, 10:45:32 »
Dit bedoel ik met formatting trouwens (heb voor de leesbaarheid de query en c.execute gesplitst):
tabelnaam = "coins1hr"
query = f"INSERT OR REPLACE INTO {tabelnaam} (datum, tijd, naam, O, H, L, C, usdeur) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
c.execute(query, (list[0], list[1], list[2], list[3], list[4], list[5], list[6], list[7]))

Bovenstaande lijkt me makkelijk om te bouwen in een loopje met meerdere tabelnamen.
« Laatst bewerkt op: 2023/01/28, 12:06:46 door erik1984 »