Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
itlady
Člen
Avatar
itlady:11.3.2020 7:54

Chci vytvořit pomocí sql v pythonu (tkinteru) tabulky provázané one-to-many, omezené cizím klíčem.

Parent tabulka:

c.execute("""CREATE TABLE IF NOT EXISTS databaze (
                        id integer PRIMARY KEY AUTOINCREMENT,
                        cislo varchar(10) UNIQUE,
                        specifikace varchar(60),
                        jmeno varchar(60),
                        datum date)""")

Druhá tabulka:

c.execute("PRAGMA foreign_keys = 1")
c.execute("""CREATE TABLE IF NOT EXISTS nazvy (
                nazvyID integer PRIMARY KEY AUTOINCREMENT,
                posID varchar(10),
                nazev varchar(50),

                FOREIGN KEY (posID) REFERENCES databaze(cislo) ON UPDATE        CASCADE ON DELETE CASCADE)""")

Konkrétně když provedu spuštění, tak mi to hlásí např. posID není definován

Zkusil jsem: Do první tabulky jsem ručně vložila hodnoty, jako první záznam, další záznamy se budou načítat z proměnných, vložených uživatelem. Když posID přiřadím ručně nějaké hodnotě, ta se mi objeví jako cizí klíč, ale když vložím další řádek, kdy posID odkazuje na jiný řádek v parent tabulce, nečísluje se mi správně. Někdo mi poradil, že hodnotu cizího klíče musím ručně nastavit. Zkouším to pořád dokola, ale cca 14 dní jsem zaseklá na jedné věci.

Chci docílit: Snažím se, aby se mi správně čísloval cizí klíč, aby se jeho hodnota (posID v druhé tab) měnila podle hodnoty id v parent tabulce.

 
Odpovědět
11.3.2020 7:54
Avatar
Odpovídá na itlady
Michal Štěpánek:12.3.2020 8:19

Nejsem si tím úplně jistý, ale podle mě by cizím klíčem v tabulce měl být "primární" klíč té jiné tabulky...

Editováno 12.3.2020 8:20
Nahoru Odpovědět
12.3.2020 8:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
itlady
Člen
Avatar
itlady:12.3.2020 8:23

Myslím, že to tak mám. V tabulce databáze je to hodnota id, v druhé tabulce se jmenuje posID. Ted koukám, v tom kodu, co jsem uvedla mám, že je to hodnota cislo, ale už jsem zkoušela tolik variant, a žádná nefunguje. odkazovat na primární klíč id, jsem samozřejmě zkoušela.

Editováno 12.3.2020 8:24
 
Nahoru Odpovědět
12.3.2020 8:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.