Вложение нескольких файлов db3 с использованием python - PullRequest
1 голос
/ 11 февраля 2020

У меня есть 4 базы данных SQLite, все с одинаковой схемой, но каждая имеет уникальные данные. Я хотел бы объединить все 4 и выполнить запросы к ним. Я также хотел бы провести некоторый анализ с Pandas для различных таблиц в объединенной базе данных. Это будут повторяющиеся задания, которые я хотел бы написать. У меня есть опыт работы в python, и я просто пытаюсь изучить и использовать python в реальных проектах.

Пока у меня есть 4 файла .db3

db1
db2
db3
db4

Все имеют одинаковую схему только данные из 4 источников. Я пытался присоединить все 4 через python скрипт с использованием sqlite3 и запустить ATTACH, но у меня возникли проблемы.

Моя идея состоит в том, чтобы перебрать файлы в папке и записать в новую базу данных, запустить кастом запрашивает, выводит на фрейм данных и выполняет другие операции сортировки / фильтрации / сопоставления / графирования.

import sqlite3

conn = sqlite3.connect("db1.db3")
conn2 = sqlite3.connect("db2.db3")
print("Opened db1 db successfully...")

c = conn.cursor()
c2 = conn2.cursor()

rows = c.execute("SELECT * from table_name")
c.execute("ATTACH db2.db3 as newdb")
print (rows)
print (type(rows))
dir(rows)

Руководство по поиску идей

1 Ответ

0 голосов
/ 11 февраля 2020

Рассмотрим запрос UNION после ATTACH с индикатором для его источника, все с использованием одного соединения:

import sqlite3

conn = sqlite3.connect("db1.db3")    
print("Opened db1 db successfully...")

c = conn.cursor()

c.execute("ATTACH 'db2.db3' as db2")
c.execute("ATTACH 'db3.db3' as db3")
c.execute("ATTACH 'db4.db3' as db4")

union_sql = '''SELECT *, 'db1' as source
               FROM table_name 
               UNION ALL
               SELECT *, 'db2' as source
               FROM db2.table_name 
               UNION ALL
               SELECT *, 'db3' as source
               FROM db3.table_name 
               UNION ALL
               SELECT *, 'db4' as source
               FROM db4.table_name 
            '''

rows = c.execute(sql)

for r in rows.fetchall():
    print(r)
...

И для pandas передайте вышеуказанный запрос объединения в read_sql:

df = pd.read_sql(union_sql, conn)

df.shape
df.dtypes
df.describe(include='all')

df.head(10)
df.tail(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...