
Mam taką bazę danych:
https://pastebin.com/11dBhNE7
Generalnie chodzi o to, że jeden "pocket" może przechowywać wiele "itemów"
Przykładowa baza danych:
item:
1, 'A1', None
2, 'A2', None
3, 'A4', None
pocket:
1, 'N1'
2, 'N2'
Problem 1 jest taki, że jak zrobię:
c.execute(UPDATE item SET pocketid = :pid WHERE itemid = :aid",{"aid": 1, "pid":"elo"})
to bez problemu doda "elo' do pola pocket_id, które jest typy INTEGER
Problem 2 jest taki, że jak zrobię:
c.execute("SELECT * FROM item JOIN pocket")
return c.fetchall()
to dostanę:
(1, 'A1', 'elo', 1, 'N1')
(1, 'A1', 'elo', 2, 'N2')
(2, 'A2', None, 1, 'N1')
(2, 'A2', None, 2, 'N2')
(3, 'A4', None, 1, 'N1')
(3, 'A4', None, 2, 'N2')
zamiast zbioru pustego, bo przecież klucz FOREIGN KEY z tabeli item nie zgadza się z żadnym polem pocket
?
używam: #python #sql #sqlite
https://pastebin.com/11dBhNE7
Generalnie chodzi o to, że jeden "pocket" może przechowywać wiele "itemów"
Przykładowa baza danych:
item:
1, 'A1', None
2, 'A2', None
3, 'A4', None
pocket:
1, 'N1'
2, 'N2'
Problem 1 jest taki, że jak zrobię:
c.execute(UPDATE item SET pocketid = :pid WHERE itemid = :aid",{"aid": 1, "pid":"elo"})
to bez problemu doda "elo' do pola pocket_id, które jest typy INTEGER
Problem 2 jest taki, że jak zrobię:
c.execute("SELECT * FROM item JOIN pocket")
return c.fetchall()
to dostanę:
(1, 'A1', 'elo', 1, 'N1')
(1, 'A1', 'elo', 2, 'N2')
(2, 'A2', None, 1, 'N1')
(2, 'A2', None, 2, 'N2')
(3, 'A4', None, 1, 'N1')
(3, 'A4', None, 2, 'N2')
zamiast zbioru pustego, bo przecież klucz FOREIGN KEY z tabeli item nie zgadza się z żadnym polem pocket
?
używam: #python #sql #sqlite
- Najlepsze
- Wszystkie komentarze







on item.pocket_id = pocket.idczy jakoś tak)SELECT * FROM item JOIN pocket on item.pocketid = pocket.pid
@scorpio18k:
Foreign Key pozwala zamodelować zależność wartosci danego pola od wartości z innej tabeli i zbudować powiązanie (a wiec moze rzucic błedem jesli docelowa tabela nie ma odpowiadającej wartosci).
W praktyce optymalizator bazy danych bedzie mogl tez skorzystac z FK przy budowie zapytan. Do tego jednak przydaje się jeszcze indeks na takiej kolumnie itd. itp.
Teraz mam zadanie dla Ciebie:
- pomyśl chwilę dlaczego Twoje założenie o tym, że automatycznie po FK system
Zastanawiam się jeszce po co w takim razie robić FOREIGN KEY skoro i tak trzeba wskazać po których kolumnach łączę?
dany lot ma swój numer, datę, lotnisko startu (
FromAirport) i lotnisko lądowaniaToAirport, np.LO26, 20220420, WAW, JFKi zarówno poleFromAirportjak iToAirportjest kluczem obcym wskazującym na tabelę przechowującą dane o lotniskach