Bantuan apa pun tentang masalah ini akan sangat dihargai.
Jadi pada dasarnya saya ingin menjalankan kueri ke database SQL saya dan menyimpan data yang dikembalikan sebagai struktur data Pandas.
Saya telah melampirkan kode untuk kueri.
Saya membaca dokumentasi tentang Pandas, tetapi saya memiliki masalah untuk mengidentifikasi jenis kembalian kueri saya.
Saya mencoba mencetak hasil kueri, tetapi tidak memberikan informasi yang berguna.
Terima kasih!!!!
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)
Jadi saya agak ingin memahami apa format / tipe data variabel saya "resoverall" dan bagaimana menaruhnya dengan struktur data PANDAS.
python
mysql
data-structures
pandas
pengguna1613017
sumber
sumber
Jawaban:
Berikut kode terpendek yang akan melakukan pekerjaan itu:
Anda bisa lebih menarik dan mengurai jenisnya seperti dalam jawaban Paul.
sumber
df = DataFrame(cursor.fetchall())
mengembalikanValueError: DataFrame constructor not properly called!
, tampak bahwa tupel tupel tidak dapat diterima untuk konstruktor DataFrame. Juga tidak ada.keys()
kursor baik dalam kamus atau mode tupel.keys()
fungsi tetapi tidak bisa berfungsi.df.columns=[ x.name for x in recoverall.description ]
Edit: Maret 2015
Seperti disebutkan di bawah ini, panda sekarang menggunakan SQLAlchemy untuk membaca dari ( read_sql ) dan memasukkan ke ( to_sql ) database. Berikut ini seharusnya bekerja
Jawaban sebelumnya: Melalui mikebmassey dari pertanyaan serupa
sumber
pd.read_sql()
dalam potongan kode di atas?pyodbc
danpandas
bersama. Menambahkan jawaban baru dengan contoh FYI.Jika Anda menggunakan ORM SQLAlchemy daripada bahasa ekspresi, Anda mungkin ingin mengonversi objek berjenis
sqlalchemy.orm.query.Query
menjadi bingkai data Pandas.Pendekatan terbersih adalah mendapatkan SQL yang dihasilkan dari atribut pernyataan kueri, dan kemudian menjalankannya dengan
read_sql()
metode pandas . Misalnya, dimulai dengan objek Query yang disebutquery
:sumber
pandas.read_sql_query
, meneruskannyaquery.statement
. Lihat jawaban ini: stackoverflow.com/a/29528804/1273938Sunting 2014-09-30:
panda kini memiliki
read_sql
fungsi. Anda pasti ingin menggunakannya.Jawaban asli:
Saya tidak dapat membantu Anda dengan SQLAlchemy - Saya selalu menggunakan pyodbc, MySQLdb, atau psychopg2 sesuai kebutuhan. Namun saat melakukannya, fungsi sesederhana di bawah ini cenderung sesuai dengan kebutuhan saya:
sumber
read_sql
masih dapat menerima koneksi non-SQLAlchemy melalui misalnya, pyodbc, psychopg2, dllKonektor MySQL
Bagi mereka yang bekerja dengan konektor mysql, Anda dapat menggunakan kode ini sebagai permulaan. (Terima kasih kepada @Daniel Velkov)
Referensi yang digunakan:
sumber
Ini kode yang saya gunakan. Semoga ini membantu.
sumber
Ini adalah jawaban singkat dan jelas untuk masalah Anda:
sumber
1. Menggunakan MySQL-connector-python
2. Menggunakan SQLAlchemy
sumber
Seperti Nathan, saya sering ingin membuang hasil dari sqlalchemy atau sqlsoup Query ke dalam bingkai data Pandas. Solusi saya sendiri untuk ini adalah:
sumber
pandas.read_sql_query
, meneruskannyaquery.statement
. Lihat jawaban ini: stackoverflow.com/a/29528804/1273938resoverall
adalah objek ResultProxy sqlalchemy. Anda dapat membaca lebih lanjut tentang ini di dokumen sqlalchemy , yang terakhir menjelaskan penggunaan dasar bekerja dengan Mesin dan Koneksi. Penting di sini adalahresoverall
seperti diktik.Panda menyukai dikt seperti objek untuk membuat struktur datanya, lihat dokumen online
Semoga berhasil dengan sqlalchemy dan panda.
sumber
Cukup gunakan
pandas
danpyodbc
bersama - sama. Anda harus mengubah string koneksi Anda (connstr
) sesuai dengan spesifikasi database Anda.Saya telah menggunakan
pyodbc
beberapa database perusahaan (misalnya SQL Server, MySQL, MariaDB, IBM).sumber
to_sql
metode padaDataFrame
objek. Metode tersebut secara default menggunakan SQLite, jadi Anda harus secara eksplisit memberikan objek yang mengarah ke database MSSQL. Lihat dokumen .pandas
lebih dioptimalkan untuk pekerjaan ETL ringan, tapi sayangnya ...Pertanyaan ini sudah lama, tapi saya ingin menambahkan dua sen saya. Saya membaca pertanyaan sebagai "Saya ingin menjalankan kueri ke database SQL [saya] dan menyimpan data yang dikembalikan sebagai struktur data Pandas [DataFrame]."
Dari kode sepertinya yang Anda maksud adalah database mysql dan menganggap yang Anda maksud pandas DataFrame.
Sebagai contoh,
Ini akan mengimpor semua baris testTable ke dalam DataFrame.
sumber
Ini milikku. Untuk berjaga-jaga jika Anda menggunakan "pymysql":
sumber
pandas.io.sql.write_frame TIDAK DIGUNAKAN LAGI. https://pandas.pydata.org/pandas-docs/version/0.15.2/generated/pandas.io.sql.write_frame.html
Harus berubah menggunakan pandas.DataFrame.to_sql https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
Ada solusi lain. PYODBC ke Pandas - DataFrame tidak berfungsi - Bentuk nilai yang diteruskan adalah (x, y), indeks menyiratkan (w, z)
Mulai Pandas 0.12 (saya yakin) Anda dapat melakukan:
Sebelum 0.12, Anda dapat melakukan:
sumber
Lama dari posting terakhir tapi mungkin itu membantu seseorang ...
Jalan pintas dari Paul H:
sumber
cara terbaik saya melakukan ini
sumber
Jika tipe hasil adalah ResultSet , Anda harus mengubahnya menjadi kamus terlebih dahulu. Kemudian kolom DataFrame akan dikumpulkan secara otomatis.
Ini berfungsi pada kasus saya:
sumber