pandas對象保存到mysql出錯提示“BLOB/TEXT column used in key specification without a key length”解決辦法


 

問題

將DataFrame數據保存到mysql中時,出現錯誤提示:
  BLOB/TEXT column used in key specification without a key length

原因

出問題的原因是DataFrame對象索引的數據類型是TEXT/BLOB或其從屬的類型,當將其作為mysql中的主鍵的時候,如果這些數據類型缺少明確的長度值,mysql無法保證主鍵的唯一性,因為這個主鍵是一個變量,其長度是動態的。所以當使用 TEXT/BLOB類型的數據作為索引的時候,數據的長度必須提供給mysql,使其能夠明確鍵的長度。但是mysql不支持對TEXT/BLOB長度的限制。

 

同樣的錯誤也會出現在試圖將非TEXT/BLOB類型的數據列轉換成TEXT/BLOB類型,這些列被定義成獨立的索引。AlterTable命令會失效。

 

解決方法

解決這個問題的方式之一是舍棄TEXT/BLOB列作為索引,或者設置另外的列作為主鍵。如果不得不設置成主鍵,而想限制TEXT/BLOB的長度,可以嘗試使用VARCHAR並設置其長度。VARCHAR默認長度是255個字符,並且其長度必須在其聲明之后在其括號中設置,例如,VARCHAR(200)將其設置成200個字符長度。

將DataFrame數據輸出到mysql時強制將索引轉換成VARCHAR並限制其長度,其中的code是索引的標簽:

1 data.to_sql('data',engine,if_exists='replace',dtype={'code':VARCHAR(data.index.get_level_values('code').str.len().max())})

 

參考

http://stackoverflow.com/questions/38522513/can-pandas-with-mysql-support-text-indexes

http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM