簡體   English   中英

從MySQL獲取表到Pandas的最快方法

[英]Fastest way to fetch table from MySQL into Pandas

我試圖確定從MySQL獲取數據到Pandas的最快方法。 到目前為止,我嘗試了三種不同的方法:

方法1:使用pymysql並修改字段類型(靈感來自最快的方式將數字數據加載到MySQL的python / pandas / numpy數組中

import pymysql 
from pymysql.converters import conversions
from pymysql.constants import FIELD_TYPE
conversions[FIELD_TYPE.DECIMAL] = float
conversions[FIELD_TYPE.NEWDECIMAL] = float
conn = pymysql.connect(host = host, port = port, user= user, passwd= passwd, db= db)

方法2:使用MySqldb

import MySQLdb
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 = host, port = port, user= user, passwd= passwd, db= db)

方法3:使用sqlalchemy

import sqlalchemy as SQL
engine = SQL.create_engine('mysql+mysqldb://{0}:{1}@{2}:{3}/{4}'.format(user, passwd, host, port, db))

方法2是這三個中最好的,平均需要4秒才能獲取我的表格。 但是,在MySQL Workbench上獲取表只需要2秒。 如何減少這兩秒鍾? 有誰知道有任何替代方法來實現這一目標?

我想你可以找到使用特定庫的答案,例如“peewee”或pandas庫中的函數df.read_sql_query。 要使用df.read_sql_query:

MyEngine = create_engine('[YourDatabase]://[User]:[Pass]@[Host]/[DatabaseName]', echo = True)
df = pd.read_sql_query('select * from [TableName]', con= MyEngine)

另外,要將數據從數據幀上傳到SQL:

df.to_sql([TableName], MyEngine, if_exists = 'append', index=False)

如果表已經存在,則必須將if_exists ='append'置換,否則它將自動默認為失敗。 如果您想要替換為新表,也可以放置替換。

為了數據完整性,使用數據幀進行上傳和下載是很好的,因為它能夠很好地處理數據。 根據您上傳的大小,上傳時間也應非常高效。

如果你想采取額外步驟,雖然我沒有親自測試速度,但是小便查詢可能有助於加快上傳時間。 Peewee是一個像SQLAlchemy這樣的ORM庫,我發現它非常容易和富有表現力。 您也可以使用數據幀。 只需略過文檔 - 您將構造並分配一個查詢,然后將其轉換為如下數據框:

MyQuery = [TableName]select()where([TableName.column] == "value")
df = pd.DataFrame(list(MyQuery.dicts()))

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM