Вы почти у цели.
A реляционная база данных , такая как sqlite, не совсем похожа на таблицу в таблице.Вместо списка строк с определенным порядком у вас есть «большой набор строк» (технически называемый набором кортежей), и вы можете сортировать их любым способом.
Способ решения вашей проблемыкак вы уже определили, когда создавали таблицу, убедитесь, что в каждой строке есть ключ , который позволяет нам ее идентифицировать (например, идентификатор вашего яблока).Когда мы хотим, чтобы этот ключ представлял идентификатор в другой таблице, это называется внешний ключ .Поэтому нам просто нужно добавить внешний ключ (называемый appleID
) в таблицу keyFeature
и использовать его всякий раз, когда мы добавляем в него строку.
Во-первых, избавьтесь от этого из вашего первого цикла forна данном этапе нам это не нужно, таблица может оставаться пустой.
c.execute('''INSERT INTO keyFeature(appleID)
VALUES(?)''', (id[i],))
Далее вам не нужно получать всю таблицу, чтобы найти желаемое яблоко, вы можете просто выбратьодин, который вас интересует:
c.execute("SELECT appleID FROM apples WHERE name=? AND farm=?",("Pink Lady", "Farm 3"))
idCurrent = c.fetchone()[0]
Реальная хитрость заключается в том, что при добавлении данных в keyFeature
мы должны вставить все данные в одну инструкцию.Таким образом, новый кортеж (строка) создается с идентификатором и всей другой информацией одновременно.Как будто это было «правильное место» в таблице.
c.execute('''INSERT INTO keyFeature(appleID, taste, texture, Colour)
VALUES(?,?,?,?)''', (idCurrent, tasteCurrent, textureCurrent, colourCurrent))
Теперь мы можем извлечь информацию из таблицы keyFeature, используя идентификатор интересующего нас яблока.
c.execute("SELECT taste, texture, Colour FROM keyFeature WHERE apple_id=?", (my_apple_id,))
Окончательный полный код:
import sqlite3
dbName = 'test.db'
################# Create the Database File ###################
# Connecting to the database file
conn = sqlite3.connect(dbName)
c = conn.cursor()
#Create the identification table with names and origin
c.execute('''CREATE TABLE apples(appleID INT PRIMARY KEY, Name TEXT,
farmGrown TEXT)''')
#Create the table with key data
c.execute('''CREATE TABLE keyFeature(appleID INT PRIMARY KEY, taste INT,
texture INT, Colour TEXT)''')
#Populate apples table and id in keyFeature table
AppleName = ['Granny Smith', 'Golden Delicious', 'Pink Lady', 'Russet']
appleFarmGrown = ['Farm 1', 'Farm 2', 'Farm 3', 'Farm 4']
id = []
for i in range(len(AppleName)):
id.append(i+1)
c = conn.cursor()
c.execute('''INSERT INTO apples(appleID, Name, farmGrown)
VALUES(?,?,?)''', (id[i], AppleName[i], appleFarmGrown[i]))
#Current Apple to populate row in keyFeature
appleCurrent = ('Pink Lady','Farm 3')
tasteCurrent = 4
textureCurrent = 5
colourCurrent = 'red'
#Find ID and write into the database
c.execute("SELECT appleID FROM apples WHERE name=? AND farm=?",(appleCurrent[0], appleCurrent[1]))
idCurrent = c.fetchone()[0]
c.execute('''INSERT INTO keyFeature(appleID, taste, texture, Colour)
VALUES(?,?,?,?)''', (idCurrent, tasteCurrent, textureCurrent, colourCurrent))
conn.commit()
conn.close()