Jede Hilfe zu diesem Problem wird sehr geschätzt.
Grundsätzlich möchte ich eine Abfrage in meiner SQL-Datenbank ausführen und die zurückgegebenen Daten als Pandas-Datenstruktur speichern.
Ich habe Code für die Abfrage angehängt.
Ich lese die Dokumentation zu Pandas, habe jedoch Probleme, den Rückgabetyp meiner Abfrage zu ermitteln.
Ich habe versucht, das Abfrageergebnis zu drucken, aber es enthält keine nützlichen Informationen.
Vielen Dank!!!!
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)
Ich möchte also irgendwie verstehen, was das Format / der Datentyp meiner Variablen "resoverall" ist und wie ich sie in die PANDAS-Datenstruktur einfügen soll.
python
mysql
data-structures
pandas
user1613017
quelle
quelle
Antworten:
Hier ist der kürzeste Code, der die Arbeit erledigt:
Sie können schicker werden und die Typen wie in Pauls Antwort analysieren.
quelle
df = DataFrame(cursor.fetchall())
ValueError: DataFrame constructor not properly called!
Wenn Sie zurückkehren , scheint das Tupel der Tupel für den DataFrame-Konstruktor nicht akzeptabel zu sein. Es gibt auch keinen.keys()
Cursor im Wörterbuch- oder Tupelmodus.keys()
Funktion abzurufen , kann ihn jedoch nicht zum Laufen bringen.df.columns=[ x.name for x in recoverall.description ]
Bearbeiten: März 2015
Wie unten erwähnt, verwendet pandas jetzt SQLAlchemy, um sowohl aus ( read_sql ) zu lesen als auch in ( to_sql ) eine Datenbank einzufügen . Folgendes sollte funktionieren
Vorherige Antwort: Über mikebmassey aus einer ähnlichen Frage
quelle
pd.read_sql()
im obigen Code-Snippet implementiert ?pyodbc
undpandas
zusammen eine ganze Menge . Hinzufügen einer neuen Antwort mit Beispiel, FYI.Wenn Sie ORM von SQLAlchemy anstelle der Ausdruckssprache verwenden, möchten Sie möglicherweise ein Objekt vom Typ
sqlalchemy.orm.query.Query
in einen Pandas- Datenrahmen konvertieren .Der sauberste Ansatz besteht darin, das generierte SQL aus dem Anweisungsattribut der Abfrage abzurufen und es dann mit der
read_sql()
Methode von pandas auszuführen . Beginnen Sie beispielsweise mit einem Abfrageobjekt mit dem Namenquery
:quelle
pandas.read_sql_query
undquery.statement
an sie weiterzuleiten . Siehe diese Antwort: stackoverflow.com/a/29528804/1273938Bearbeiten 30.09.2014:
Pandas hat jetzt eine
read_sql
Funktion. Sie möchten das definitiv stattdessen verwenden.Ursprüngliche Antwort:
Ich kann Ihnen bei SQLAlchemy nicht helfen - ich verwende nach Bedarf immer pyodbc, MySQLdb oder psychopg2. Dabei entspricht eine so einfache Funktion wie die folgende meinen Anforderungen:
quelle
read_sql
kann weiterhin Nicht-SQLAlchemy-Verbindungen akzeptieren, z. B. durch pyodbc, psychopg2 usw.MySQL Connector
Für diejenigen, die mit dem MySQL-Connector arbeiten, können Sie diesen Code als Start verwenden. (Danke an @Daniel Velkov)
Gebrauchte Refs:
quelle
Hier ist der Code, den ich benutze. Hoffe das hilft.
quelle
Dies ist eine kurze und klare Antwort auf Ihr Problem:
quelle
1. Verwenden von MySQL-connector-python
2. Verwenden von SQLAlchemy
quelle
Wie Nathan möchte ich häufig die Ergebnisse einer SQLalchemie- oder SQLSoup-Abfrage in einem Pandas-Datenrahmen speichern. Meine eigene Lösung dafür ist:
quelle
pandas.read_sql_query
undquery.statement
an sie weiterzuleiten . Siehe diese Antwort: stackoverflow.com/a/29528804/1273938resoverall
ist ein sqlalchemy ResultProxy-Objekt. Weitere Informationen finden Sie in den sqlalchemy-Dokumenten . Letzteres erläutert die grundlegende Verwendung der Arbeit mit Engines und Connections. Wichtig ist hier, dassresoverall
diktiert wird.Pandas diktieren gerne Objekte, um ihre Datenstrukturen zu erstellen. Weitere Informationen finden Sie in den Online-Dokumenten
Viel Glück mit sqlalchemy und Pandas.
quelle
Einfach benutzen
pandas
undpyodbc
zusammen. Sie müssen Ihre Verbindungszeichenfolge (connstr
) gemäß Ihren Datenbankspezifikationen ändern .Ich habe
pyodbc
mit mehreren Unternehmensdatenbanken (z. B. SQL Server, MySQL, MariaDB, IBM) verwendet.quelle
to_sql
Methode für dasDataFrame
Objekt. Diese Methode ist standardmäßig SQLite, daher müssen Sie ihr explizit ein Objekt übergeben, das auf die MSSQL-Datenbank verweist. Siehe Dokumente .pandas
mehr für leichte ETL-Arbeit optimiert, aber leider ...Diese Frage ist alt, aber ich wollte meine zwei Cent hinzufügen. Ich las die Frage als "Ich möchte eine Abfrage an meine [meine] SQL-Datenbank ausführen und die zurückgegebenen Daten als Pandas-Datenstruktur [DataFrame] speichern."
Aus dem Code geht hervor, dass Sie MySQL-Datenbank meinen und davon ausgehen, dass Sie Pandas DataFrame meinen.
Beispielsweise,
Dadurch werden alle Zeilen von testTable in einen DataFrame importiert.
quelle
Hier ist mein. Nur für den Fall, dass Sie "pymysql" verwenden:
quelle
pandas.io.sql.write_frame ist DEPRECATED. https://pandas.pydata.org/pandas-docs/version/0.15.2/generated/pandas.io.sql.write_frame.html
Sollte sich ändern, um pandas.DataFrame.to_sql zu verwenden https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html zu verwenden
Es gibt eine andere Lösung. PYODBC zu Pandas - DataFrame funktioniert nicht - Die Form der übergebenen Werte ist (x, y), Indizes implizieren (w, z)
Ab Pandas 0.12 (glaube ich) können Sie Folgendes tun:
Vor 0.12 konnten Sie Folgendes tun:
quelle
Lange Zeit vom letzten Beitrag, aber vielleicht hilft es jemandem ...
Kurzweg als Paul H:
quelle
am besten mache ich das
quelle
Wenn der Ergebnistyp ResultSet ist , sollten Sie ihn zuerst in ein Wörterbuch konvertieren. Dann werden die DataFrame-Spalten automatisch erfasst.
Das funktioniert in meinem Fall:
quelle