/ / Wie erstelle ich eindeutige Zeilen in einer Tabelle? - Python, sqlite

Wie erstelle ich eindeutige Zeilen in einer Tabelle? - Python, sqlite

Ich habe gerade angefangen, SQLite zu lernen. Ich benutze Python. Die Frage ist, wie Sie Zeilen in Tabellen erstellen, so dass sie nach Namen eindeutig sind und wie Sie id1 und id2 (extrahieren), um sie in eine separate Tabelle einzufügen.

import sqlite3

conn = sqlite3.connect("my.db")
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS table1(
id1 integer primary key autoincrement, name)""")
c.execute("""CREATE TABLE IF NOT EXISTS table2(
id2 integer primary key autoincrement, name)""")
c.execute("CREATE TABLE IF NOT EXISTS t1_t2(id1, id2)") # many-to-many
conn.commit()
conn.close()


conn = sqlite3.connect("my.db")
c = conn.cursor()
c.execute("INSERT INTO table1 VALUES (null, "Sue Monk Kidd")")
c.execute("INSERT INTO table2 VALUES (null, "The Invention of Wings")")
#c.execute("INSERT INTO t1_t2 VALUES (id1, id2)")
c.execute("INSERT INTO table1 VALUES (null, "Colleen Hoover")")
c.execute("INSERT INTO table2 VALUES (null, "Maybe Someday")")
#c.execute("INSERT INTO t1_t2 VALUES (id1, id2)")

Vielen Dank.

Antworten:

1 für die Antwort № 1

Ich glaube, Sie haben Probleme mit dem TischSchaffung. Ich bezweifle, dass es funktioniert hat, weil die Namensspalten keinen Typ haben. Sie sollten wahrscheinlich varchar von einiger Länge sein. Die Definition der JOIN-Tabelle ist auch nicht richtig.

CREATE TABLE IF NOT EXISTS table1 (
id1 integer primary key autoincrement,
name varchar(80)
);

CREATE TABLE IF NOT EXISTS table2 (
id2 integer primary key autoincrement,
name varchar(80)
);


CREATE TABLE IF NOT EXISTS t1_t2 (
id1 integer,
id2 integer,
primary key(id1, id2),
foreign key(id1) references table1(id1),
foreign key(id2) references table2(id2)
);

Ich würde die Tabellen nicht im Code erstellen. Erstellen Sie ein Skript, führen Sie es im SQLite-Administrator aus und halten Sie die Tabellen bereit, wenn Ihre Python-App ausgeführt wird.

Ich würde viel mehr über Ihre Tabellennamen nachdenken, wenn dies mehr als nur Beispiele sind.


0 für die Antwort № 2

Ich habe das Problem mit eindeutigen Namen gefunden eindeutiges Spaltenproblem.

Eigentlich sollte ich INSERT in INSERT OR IGNORE ändern

import sqlite3

conn = sqlite3.connect("my.db")
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS table1(
id1 integer primary key autoincrement, name TEXT unique)""")
c.execute("""CREATE TABLE IF NOT EXISTS table2(
id2 integer primary key autoincrement, name TEXT unique)""")
c.execute("CREATE TABLE IF NOT EXISTS t1_t2(id1, id2)") # many-to-many
conn.commit()
conn.close()


conn = sqlite3.connect("my.db")
c = conn.cursor()
c.execute("INSERT OR IGNORE INTO table1 VALUES (null, "Sue Monk Kidd")")
c.execute("INSERT OR IGNORE INTO table2 VALUES (null, "The Invention of Wings")")