Объединение двух таблиц SQLite из одной базы данных с python и sqlite3 - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать новую таблицу, которая объединяет столбцы из двух разных таблиц, используя столбец идентификатора, который является общим для обоих в качестве ключевого слова.Давайте теперь представим, что у меня есть база данных с именем db.db, которая включает две таблицы с именами table1 и table2.

table1 выглядит следующим образом:

id | item | price
-------------
 1 | book | 20  
 2 | copy | 30   
 3 | pen  | 10 

и table2 примерно так:

id | shop | color
-------------
 1 |  11  | blue  
 2 |  34  | red   
 3 |  25  | red 

Что мне написать в sqlite3, чтобы что-то вроде этого было ??

id | item | price | shop | color
-------------------------------
 1 | book | 20    |  11  | blue 
 2 | copy | 30    |  34  | red   
 3 | pen  | 10    |  25  | red 

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Отредактировано: попробуйте изменить LEFT JOIN для INNER JOIN, чтобы увидеть, работает ли оно.

import sqlite3
conn = sqlite3.connect('db.db')   
c = conn.cursor()

def merged():
    c.execute('CREATE TABLE table3 AS SELECT * FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id')
    for line in c.fetchall():
        print(line)
merged()
0 голосов
/ 12 октября 2018

Вы можете использовать itertools.groupby:

import itertools, sqlite3
d1 = list(sqlite3.connect('db.db').cursor().execute("SELECT id, item, price FROM table1"))
d2 = list(sqlite3.connect('db.db').cursor().execute("SELECT id, item, price FROM table2"))
full_data = sorted(d1+d2, key=lambda x:x[0])
grouped = [[a, list(b)] for a, b in itertools.groupby(full_data, key=lambda x:x[0])]
final_grouped = [[a, *[i for c in b for i in c[1:]]] for a, b in grouped]
conn = sqlite3.connect('db.db')
conn.execute('CREATE TABLE file3 (id real, item text, price real, shop real, color text)')
conn.executemany('INSERT INTO file3 VALUES (?, ?, ?, ?, ?)', final_grouped)
conn.commit()
conn.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...