Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara tercepat untuk memuat data numerik ke dalam array python/pandas/numpy dari MySQL

"Masalah" tampaknya adalah konversi tipe yang terjadi dari tipe desimal MySQL ke desimal python. Desimal yang dilakukan MySQLdb, pymysql, dan pyodbc pada data. Dengan mengubah file converters.py (di baris terakhir) di MySQLdb menjadi:

conversions[FIELD_TYPE.DECIMAL] = float
conversions[FIELD_TYPE.NEWDECIMAL] = float

alih-alih desimal.Desimal tampaknya benar-benar menyelesaikan masalah dan sekarang kode berikut:

import MySQLdb
import numpy
import time

t = time.time()
conn = MySQLdb.connect(host='',...)
curs = conn.cursor()
curs.execute("select x,y from TABLENAME")
data = numpy.array(curs.fetchall(),dtype=float)
print(time.time()-t)

Berjalan dalam waktu kurang dari satu detik! Yang lucu, desimal. Desimal tampaknya tidak pernah menjadi masalah di profiler.

Solusi serupa harus bekerja dalam paket pymysql. pyodbc lebih rumit:semuanya ditulis dalam C++, maka Anda harus mengkompilasi ulang seluruh paket.

PERBARUI

Berikut adalah solusi yang tidak perlu mengubah kode sumber MySQLdb:Python MySQLdb mengembalikan datetime.date dan desimal Solusinya kemudian memuat data numerik ke dalam panda:

import MySQLdb
import pandas.io.sql as psql
from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE

conversions[FIELD_TYPE.DECIMAL] = float
conversions[FIELD_TYPE.NEWDECIMAL] = float
conn = MySQLdb.connect(host='',user='',passwd='',db='')
sql = "select * from NUMERICTABLE"
df = psql.read_frame(sql, conn)

Mengalahkan MATLAB dengan faktor ~4 dalam memuat tabel 200k x 9!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat dan menghapus database dan tabel di MySQL

  2. Memigrasikan MySQL ke PostgreSQL di AWS RDS, Bagian 3

  3. KESALAHAN di PDO :Panggil ke fungsi anggota prepare() pada null

  4. MySQL menggabungkan semua kolom

  5. Masalah Batas Waktu Koneksi MySQL - Aplikasi Grails di Tomcat menggunakan Hibernate dan ORM