Cześć Mirki, próbuję napisać w #python #sqlite zapytanie które będzie mi wrzucac odpowednie wartości w odpowiednie miejsce:
c.execute("UPDATE MOJATABELA SET KOLUMNA1 = ? WHERE WIERSZ= ? ",
(wartoscWstawiana1, wiersz1))
dbConnection.commit()
no i git to działa
Problem w tym ze mam kilkanascie kolumn i zaleznie od wartosci chcę aby była ona wpisywana w innej kolumnie
Próbowałem więc coś takiego:
c.execute("UPDATE MOJATABELA SET ? = ? WHERE WIERSZ= ? ",
(jakasKolumna, wartoscWstawiana1, wiersz1))
dbConnection.commit()
no i to niestety nie działa (dostaję komunikat: "sqlite3.OperationalError: near "?": syntax error".
Nie wiem czy to kwestia moich kiepskich umiejętności czy dwutygniowej izolacji (zapewne jedno i drugie ( ͡° ͜ʖ ͡°) ) ale może mi ktoś pomóc?
c.execute("UPDATE MOJATABELA SET KOLUMNA1 = ? WHERE WIERSZ= ? ",
(wartoscWstawiana1, wiersz1))
dbConnection.commit()
no i git to działa
Problem w tym ze mam kilkanascie kolumn i zaleznie od wartosci chcę aby była ona wpisywana w innej kolumnie
Próbowałem więc coś takiego:
c.execute("UPDATE MOJATABELA SET ? = ? WHERE WIERSZ= ? ",
(jakasKolumna, wartoscWstawiana1, wiersz1))
dbConnection.commit()
no i to niestety nie działa (dostaję komunikat: "sqlite3.OperationalError: near "?": syntax error".
Nie wiem czy to kwestia moich kiepskich umiejętności czy dwutygniowej izolacji (zapewne jedno i drugie ( ͡° ͜ʖ ͡°) ) ale może mi ktoś pomóc?
lionbest
2020-04-10 19:28:24
+2
@Kohrd: SQLite nie pozwala na parametryzowanie nazw kolumn i tabeli. Jeżeli potrzebujesz coś takiego robić, to zazwyczaj świadczy o złym projekcie bazy danych.
Zazwyczaj to dodaje się kolumnę, która przechowuje nazwę/indeks pola.
Zazwyczaj to dodaje się kolumnę, która przechowuje nazwę/indeks pola.
lionbest
2020-04-10 19:46:26
+2
@Kohrd: Cała idea bazy danych polega na tym, że operujesz na wierszach, a nie na pojedynczych polach.
Ustawianie jednego pola poprzez UPDATE trwa tyle, co UPDATE wszystkich pól, jednak dla wielu pól, będzie to nieporównywalnie dłużej niż zrobienie jednego UPDATE dla trzech pól (indeksu, nazwy oraz wartości).
Jeżeli to tylko jakiś skrycik to nie przejmuj się, że łączysz ciągi znaków w zapytanie. Możesz napisać zapytanie, które zrobi ci nową tabelę ze starej.
Ustawianie jednego pola poprzez UPDATE trwa tyle, co UPDATE wszystkich pól, jednak dla wielu pól, będzie to nieporównywalnie dłużej niż zrobienie jednego UPDATE dla trzech pól (indeksu, nazwy oraz wartości).
Jeżeli to tylko jakiś skrycik to nie przejmuj się, że łączysz ciągi znaków w zapytanie. Możesz napisać zapytanie, które zrobi ci nową tabelę ze starej.
lionbest
2020-04-10 19:36:22
+1
@Kohrd: Ale tak nie powinno się robić. Najprościej dodać pole w bazie danych z nazwą którą chcesz zapisać i kluczem będzie ta nazwa plus wartość kolumny wiersz.