Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhanh nhất để tải dữ liệu số vào mảng python / pandas / numpy từ MySQL

"Vấn đề" dường như là việc chuyển đổi kiểu xảy ra từ kiểu thập phân của MySQL sang kiểu thập phân của python. Thập phân mà MySQLdb, pymysql và pyodbc thực hiện trên dữ liệu. Bằng cách thay đổi tệp convertters.py (ở những dòng cuối cùng) trong MySQLdb để có:

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

thay vì thập phân. thập phân dường như giải quyết hoàn toàn vấn đề và bây giờ là đoạn mã sau:

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)

Chạy trong vòng chưa đầy một giây! Thật buồn cười, số thập phân. Số thập phân dường như chưa bao giờ là vấn đề trong trình mô tả.

Giải pháp tương tự sẽ hoạt động trong gói pymysql. pyodbc phức tạp hơn:tất cả đều được viết bằng C ++, do đó bạn sẽ phải biên dịch lại toàn bộ gói.

CẬP NHẬT

Đây là một giải pháp không yêu cầu sửa đổi mã nguồn MySQLdb: Python MySQLdb trả về datetime.date và decimal Giải pháp sau đó để tải dữ liệu số vào gấu trúc:

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)

Đánh bại MATLAB với hệ số ~ 4 khi tải bảng 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. tạo số duy nhất mysql

  2. Lưu trữ hiệu quả 7.300.000.000 hàng

  3. Có thể có một chế độ xem được lập chỉ mục trong MySQL không?

  4. Laravel:Chỉ mục không xác định:trình điều khiển

  5. PHP PDO so với mysql_connect bình thường