Zapytanie SQLite nie aktualizuje danych w tabeli

Zapytanie SQLite nie aktualizuje danych w tabeli
AL
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:3
0

Witam, mam problem ponieważ w programie chcę zmienić wartość w bazie danych poprzez python używając sqlite3.
Utworzyłem tabelę zapytaniem:

Kopiuj
CREATE TABLE IF NOT EXISTS testowa_slowa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slowo_polski TEXT NOT NULL,
slowo_niemiecki TEXT NOT NULL,
wspolczynnik INTEGER NOT NULL,
ilosc_pojawien CHAR NOT NULL,
UNIQUE (slowo_polski, slowo_niemiecki) ON CONFLICT IGNORE);

Do tabeli dodaję poprawnie rekordy:

Kopiuj
INSERT INTO testowa_slowa
(slowo_polski, slowo_niemiecki, wspolczynnik, ilosc_pojawien)```
VALUES ('""" + tablica[0] + "', '" + tablica[1] + "', 0, 0);"

na stronie https://sqliteonline.com/ zapytaniem UPDATE dokonuje poprawnej modyfikacji danych:

Kopiuj
UPDATE testowa_slowa SET wspolczynnik='97' WHERE id='9',

niestety w bazie na moim komputerze to samo zapytanie UPDATE nie działa prawidłowo.
Gdzie popełniłem błąd?
W załączonym pliku znajduje się baza danych oraz cały program.

edytowany 2x, ostatnio: Riddle
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
1

SQL Lite jest bazą specyficzną. Miedzy innymi nadmiernie tolerancyjną (nie ma w rzeczywistości typów kolumn).
To takie moje skojarzenie, jak np id, współczynnik deklarujesz liczbowo a używasz jak string.

  1. na pewno w obu bazach jest na tym samym id ?
  2. testowe środowska webowe mogą (to moje przypuszczenie) mieć modyfikacje, np zw z bezpiecznym prowadzeniem tego biznesu.

If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
AL
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:3
0
ZrobieDobrze napisał(a):

SQL Lite jest bazą specyficzną. Miedzy innymi nadmiernie tolerancyjną (nie ma w rzeczywistości typów kolumn).
To takie moje skojarzenie, jak np id, współczynnik deklarujesz liczbowo a używasz jak string.

  1. na pewno w obu bazach jest na tym samym id ?
  2. testowe środowska webowe mogą (to moje przypuszczenie) mieć modyfikacje, np zw z bezpiecznym prowadzeniem tego biznesu.
  1. Tak w obu bazach jest to samo id.
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
0

Całego programu nie będę przeglądał, ale jak uruchomiłem te twoje zapytanie na tej twojej bazie to wydaje się działać normalnie:

Kopiuj
import os
import sqlite3

db_filename = 'testowa_slowa.db'
with sqlite3.connect(db_filename) as conn:
    cursor = conn.cursor()

    cursor.execute("select * from testowa_slowa WHERE id=9")

    for row in cursor.fetchall():
        print(row)

    print("-" * 30)

    cursor.execute("UPDATE testowa_slowa SET wspolczynnik='97' WHERE id='9'")

    cursor.execute("select * from testowa_slowa WHERE id=9")
    for row in cursor.fetchall():
        print(row)
Kopiuj
$ python test.py 
(9, 'kucharz', 'Koch', 100)
------------------------------
(9, 'kucharz', 'Koch', 97)
Spearhead
btw, lepiej używać nazwanych parametrów zamiast wrzucać je bezpośrednio w stringach
AL
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:3
0
Spearhead napisał(a):

Całego programu nie będę przeglądał, ale jak uruchomiłem te twoje zapytanie na tej twojej bazie to wydaje się działać normalnie:

Kopiuj
import os
import sqlite3

db_filename = 'testowa_slowa.db'
with sqlite3.connect(db_filename) as conn:
    cursor = conn.cursor()

    cursor.execute("select * from testowa_slowa WHERE id=9")

    for row in cursor.fetchall():
        print(row)

    print("-" * 30)

    cursor.execute("UPDATE testowa_slowa SET wspolczynnik='97' WHERE id='9'")

    cursor.execute("select * from testowa_slowa WHERE id=9")
    for row in cursor.fetchall():
        print(row)
Kopiuj
$ python test.py 
(9, 'kucharz', 'Koch', 100)
------------------------------
(9, 'kucharz', 'Koch', 97)

Sprawdziłem, działa i nie wiem dlaczego to poprzednie nie działało :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.