Проблема вывода данных с помощью fetchall sqlite

Хочу вывести объединенные данные таблицы с помощью fetchall, а он ничего не выводит, не понимаю в чем проблема, помогите пожалуйста.

Сам код:

import sqlite3 as sq3

con = sq3.connect('test.db')
cursor = con.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS Friend(
    name TEXT not NULL,
    age INTEGER)
""")

cursor.execute("""
CREATE TABLE IF NOT EXISTS Other(
    addres TEXT not NULL,
    email TEXT not NULL)
""")

cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Petr", 23))
cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Ivan", 19))
cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Kostya", 32))

cursor.execute("INSERT INTO Other (addres, email) VALUES (?, ?)", ("ul Kapitalnaya", "[email protected]"))
cursor.execute("INSERT INTO Other (addres, email) VALUES (?, ?)", ("ul Lenina", "[email protected]"))
cursor.execute("INSERT INTO Other (addres, email) VALUES (?, ?)", ("ul Komunisticheskiy", "[email protected]"))
con.commit()

sel = cursor.execute('''
SELECT Friend.name, Other.addres
FROM Friend JOIN Other
ON Friend.name = Other.addres
''')

rows = sel.fetchall()
for i in rows:
    print(i)

Ответы (1 шт):

Автор решения: Y_T

Чтобы вывести объединенные данные из 2 таблиц, их нужно связать внутренним и внешним ключами.

cursor.execute("""
CREATE TABLE IF NOT EXISTS Friend(
    id      INTEGER     PRIMARY KEY AUTOINCREMENT,
    name    TEXT        not NULL,
    age     INTEGER
)
""")

PRIMARY KEY является уникальным ключом для каждой записи в таблице Friend.

AUTOINCREMENT автоматически прибавляет единицу к каждой следующей записи в таблице.

Теперь нужно привязать записи таблицы Other к записям Friend. Связка происходит путем указания внешнего ключа FOREIGN KEY для записей в Other, который является первичным ключом для каждой записи в Friend:

cursor.execute("""
CREATE TABLE IF NOT EXISTS Other(
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    friend_id       INTEGER,
    addres          TEXT not NULL,
    email           TEXT not NULL,
    
    FOREIGN KEY (friend_id) REFERENCES Friends (id)
)
""")

Теперь, добавляя записи во вторую таблицу, указываем 3 поля:

cursor.execute("INSERT INTO Other (friend_id, addres, email) VALUES (?, ?, ?)", (1, "ul Kapitalnaya", "[email protected]"))

Запрос на объединение данных из таблиц, следующий:

sel = cursor.execute('''
SELECT name, addres
FROM Friend JOIN Other
ON Friend.id = Other.friend_id
''')

Весь код получается такой:

import sqlite3 as sq3

con = sq3.connect('test.db')
cursor = con.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS Friend(
    id      INTEGER     PRIMARY KEY AUTOINCREMENT,
    name    TEXT        not NULL,
    age     INTEGER
)
""")

cursor.execute("""
CREATE TABLE IF NOT EXISTS Other(
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    friend_id       INTEGER,
    addres          TEXT not NULL,
    email           TEXT not NULL,
    
    FOREIGN KEY (friend_id) REFERENCES Friends (id)
)
""")

cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Petr", 23))
cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Ivan", 19))
cursor.execute("INSERT INTO Friend (name, age) VALUES (?, ?)", ("Kostya", 32))

cursor.execute("INSERT INTO Other (friend_id, addres, email) VALUES (?, ?, ?)", (1, "ul Kapitalnaya", "[email protected]"))
cursor.execute("INSERT INTO Other (friend_id, addres, email) VALUES (?, ?, ?)", (2, "ul Lenina", "[email protected]"))
cursor.execute("INSERT INTO Other (friend_id, addres, email) VALUES (?, ?, ?)", (3, "ul Komunisticheskiy", "[email protected]"))
con.commit()

sel = cursor.execute('''
SELECT name, addres
FROM Friend JOIN Other
ON Friend.id = Other.friend_id
''')


rows = sel.fetchall()
for item in rows:
  print(item[0], item[1])
→ Ссылка