Я использую:
- Python3
- Pandas
- Sqllite3 на моем локальном компьютере (будет Postgresql на производстве, хотя это не должно иметь значения для этой цели)
У меня есть проект, в котором я пытаюсь удалить из запросов некоторые объединения, счетчики, группы и другие агрегатные функции - все они должны быть перемещены в код.
Я новичокв Python и просмотрели руководство Pandas и другие ресурсы в StackOverflow.
Я пытаюсь воссоздать следующий запрос:
SELECT D.ID, D.Name, COUNT(W.ID)
FROM Departments D
LEFT JOIN Widgets W ON D.ID=W.department
GROUP BY D.ID, D.Name
HAVING COUNT(W.ID)>0
На стороне Python - просто с помощью двух запросов:
SELECT * FROM departments
SELECT * FROM widgets
Я могу ошибаться, но я считаю, что именно это и должно произойти:
- Импортировать модуль python и создать соединение
- Импортировать панд (из чегоя понимаю, что это возможно эффективный инструмент для такого типа работы)
- Назначьте мои запросы переменной
- Панды читают запросы
- (Объединить?) результаты запросапостроить датафрейм
- Выполнение подсчета и агрегации с использованием методов на фрейме данных
Я борюсь с синтаксисом и не могу определить, правильно ли я поступаю по этому поводу.Обе таблицы, переданные в запросы, имеют несколько столбцов сверх того, с чем я работаю, что может усугубить сложность.
Результат должен содержать идентификатор отдела, имя отдела и количество виджетов, принадлежащихотдел.Вот код Python, с которым я экспериментировал:
import sqlite3
import pandas as pd
... #functions and connection info removed
with conn:
sql1="SELECT * FROM departments"
sql2="SELECT * FROM widgets"
#print("Read Queries Into Dataframes")
df = pd.read_sql(sql1, conn)
lf = pd.read_sql(sql2, conn)
#print("Connected and read - print the dataframe")
merged_df=pd.merge(df, lf, left_on='id', right_on='department', how='inner') #.groupby(['id'])
#result=merged_df.groupby(['id'])
#result = pd.merge(df, lf, on='key')
#print(result)
Примечания:
Кажется, что (в основном) работает, пока я не представлю группу с помощью Похоже
Я получаю ключевую ошибку в ID - возможно, это синтаксическая ошибка или у меня нет псевдонима неправильно
- Изменение типа объединения (как)слева направо дает некоторые результаты NAN