Każda pomoc w tym problemie będzie bardzo mile widziana.
Zasadniczo chcę uruchomić zapytanie do mojej bazy danych SQL i zapisać zwrócone dane jako strukturę danych Pandas.
Załączam kod do zapytania.
Czytam dokumentację dotyczącą Pand, ale mam problem ze zidentyfikowaniem typu zwracanego zapytania.
Próbowałem wydrukować wynik zapytania, ale nie zawiera on żadnych przydatnych informacji.
Dzięki!!!!
from sqlalchemy import create_engine
engine2 = create_engine('mysql://THE DATABASE I AM ACCESSING')
connection2 = engine2.connect()
dataid = 1022
resoverall = connection2.execute("
SELECT
sum(BLABLA) AS BLA,
sum(BLABLABLA2) AS BLABLABLA2,
sum(SOME_INT) AS SOME_INT,
sum(SOME_INT2) AS SOME_INT2,
100*sum(SOME_INT2)/sum(SOME_INT) AS ctr,
sum(SOME_INT2)/sum(SOME_INT) AS cpc
FROM daily_report_cooked
WHERE campaign_id = '%s'", %dataid)
W pewnym sensie chcę zrozumieć, jaki jest format / typ danych mojej zmiennej „resoverall” i jak umieścić ją w strukturze danych PANDAS.
python
mysql
data-structures
pandas
user1613017
źródło
źródło
Odpowiedzi:
Oto najkrótszy kod, który wykona zadanie:
Możesz być bardziej wyszukany i przeanalizować typy, jak w odpowiedzi Paula.
źródło
df = DataFrame(cursor.fetchall())
zwracaValueError: DataFrame constructor not properly called!
, wydaje się, że krotka krotek nie jest akceptowalna dla konstruktora DataFrame. Nie ma również.keys()
kursora ani w trybie słownika, ani w trybie krotki.keys()
funkcją, ale nie mogę jej uruchomić.df.columns=[ x.name for x in recoverall.description ]
Edycja: marzec 2015
Jak zauważono poniżej, pandy używają teraz SQLAlchemy zarówno do odczytu z ( read_sql ), jak i wstawienia do ( to_sql ) bazy danych. Poniższe powinny działać
Poprzednia odpowiedź: Via mikebmassey z podobnego pytania
źródło
pd.read_sql()
w powyższym fragmencie kodu?pyodbc
ipandas
razem całkiem sporo. Dodanie nowej odpowiedzi z przykładem FYI.Jeśli używasz ORM SQLAlchemy zamiast języka wyrażeń, możesz chcieć przekonwertować obiekt typu
sqlalchemy.orm.query.Query
na ramkę danych Pandas.Najczystszym podejściem jest pobranie wygenerowanego kodu SQL z atrybutu instrukcji zapytania, a następnie wykonanie go za pomocą
read_sql()
metody pandy . Np. Zaczynając od obiektu Query o nazwiequery
:źródło
pandas.read_sql_query
, przekazującquery.statement
je do niego. Zobacz tę odpowiedź: stackoverflow.com/a/29528804/1273938Edycja 2014-09-30:
pandy mają teraz
read_sql
funkcję. Na pewno chcesz tego użyć.Oryginalna odpowiedź:
Nie mogę Ci pomóc z SQLAlchemy - zawsze używam pyodbc, MySQLdb lub psychopg2 w razie potrzeby. Ale kiedy to robię, funkcja tak prosta jak ta poniżej zwykle odpowiada moim potrzebom:
źródło
read_sql
nadal może akceptować połączenia inne niż SQLAlchemy przez np. Pyodbc, psychopg2 itd.Złącze MySQL
Dla tych, które współpracują ze złączem mysql, możesz użyć tego kodu jako początku. (Dzięki @Daniel Velkov)
Używane referencje:
źródło
Oto kod, którego używam. Mam nadzieję że to pomoże.
źródło
Oto krótka i wyraźna odpowiedź na Twój problem:
źródło
1. Korzystanie z MySQL-connector-python
2. Korzystanie z SQLAlchemy
źródło
Podobnie jak Nathan, często chcę zrzucić wyniki zapytania sqlalchemy lub sqlsoup Query do ramki danych Pandas. Moje własne rozwiązanie to:
źródło
pandas.read_sql_query
, przekazującquery.statement
je do niego. Zobacz tę odpowiedź: stackoverflow.com/a/29528804/1273938resoverall
to obiekt ResultProxy sqlalchemy. Możesz przeczytać więcej na ten temat w dokumentacji sqlalchemy , która wyjaśnia podstawowe użycie pracy z silnikami i połączeniami. Ważne jest tutaj, żeresoverall
jest jak dykt.Pandy lubi dyktować jak obiekty, aby tworzyć swoje struktury danych, zobacz dokumentację online
Powodzenia z sqlalchemy i pandami.
źródło
Po prostu użyj
pandas
ipyodbc
razem. Będziesz musiał zmodyfikować parametry połączenia (connstr
) zgodnie ze specyfikacjami bazy danych.Korzystałem
pyodbc
z kilku korporacyjnych baz danych (np. SQL Server, MySQL, MariaDB, IBM).źródło
to_sql
metody naDataFrame
obiekcie. Ta metoda jest domyślnie SQLite, więc musisz jawnie przekazać jej obiekt wskazujący na bazę danych MSSQL. Zobacz dokumentację .pandas
bardziej zoptymalizowany pod kątem lekkiej pracy w ETL, ale niestety ...To stare pytanie, ale chciałem dodać swoje dwa centy. Odczytuję pytanie jako „Chcę uruchomić zapytanie do mojej [mojej] bazy danych SQL i zapisać zwrócone dane jako strukturę danych Pandas [DataFrame]”.
Z kodu wygląda na to, że masz na myśli bazę danych mysql i zakładasz, że masz na myśli pandy DataFrame.
Na przykład,
Spowoduje to zaimportowanie wszystkich wierszy tabeli testTable do ramki DataFrame.
źródło
Tu jest moje. Na wszelki wypadek, jeśli używasz „pymysql”:
źródło
pandas.io.sql.write_frame jest DEPRECATED. https://pandas.pydata.org/pandas-docs/version/0.15.2/generated/pandas.io.sql.write_frame.html
Powinien zmienić się na pandas.DataFrame.to_sql https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
Jest inne rozwiązanie. PYODBC na Pandy - DataFrame nie działa - Kształt przekazywanych wartości to (x, y), indeksy implikują (w, z)
Od wersji Pandas 0.12 (wierzę) możesz:
Przed wersją 0.12 można było:
źródło
Dawno od ostatniego posta, ale może komuś to pomoże ...
Krótszy sposób niż Paul H:
źródło
najlepszy sposób, w jaki to robię
źródło
Jeśli typ wyniku to ResultSet , należy najpierw przekonwertować go na słownik. Następnie kolumny DataFrame zostaną zebrane automatycznie.
Działa to w moim przypadku:
źródło