pandas将数据从excel导入数据库
先上代碼
import pandas as pd from sqlalchemy import create_enginedef excel_to_DB(host='host', port='port', user='user', passwd='123456', db='dbname', path_excel='acu.xlsx',table_name='obstacle_2d_00'):"""表數據存入DB:param host: 數據庫地址:param port: 數據庫端口:param user: 數據庫賬號:param passwd: 賬號密碼:param db: 數據庫名:param path_excel: excel數據文件名:param table_name: 存入數據庫的表名"""try:engine = create_engine(f'postgresql+psycopg2://{user}:{passwd}@{host}:{port}/{db}', encoding='utf8')data_excel = pd.read_excel(path_excel, engine='openpyxl')data_dataframe = pd.DataFrame(data_excel)data_dataframe.to_sql(table_name, con=engine, if_exists='replace', index=False)except:raise ValueError(f"write data from {path_excel} failure !")-
create_engine()函數連接數據庫
postgresql+psycopg2://{user}:{passwd}@{host}:{port}/{db}'
postgresql是需要連接的數據庫,psycopg2是連接數據庫使用的第三方庫,如果是連接mysql數據庫,可以使用pymysql或者mysql。 -
pd.read_excel() 讀取excel文件
pd.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)數名說明 io string ,表示文件路徑 sheetname string,int,代表excel表內數據分表的位置,默認0 header int, sequence,表示某行數據作為列表。默認inger, 表示自動識別。 index_col int, sequence,False,索引列的位置,取值為sequence時代表多重索引。默認為None names int,sequence、False,索引列的位置,取值為sequence時代表多重索引。默認None dtype dict,代表寫入的數據類型(列表為key,數據格式為values)。默認為None 如果讀取的Pandas 讀取超過 65536 行的 Excel 文件時(xls最多支持65536 行,256 列; xlsx 最多支持 1,048,576行,16,384列),會因為默認讀取 Excel 文件的引擎xlrd只能讀取65536 行,會出現數據丟失的問題。需要將pd.read_excel中的引擎設置為openpyxl (一個專門用來操作 .xlsx 格式文件的 Python 庫,它對于最大行列數的支持和 .xlsx 文件所定義的最大行列數一致)
-
pd.to_sql()函數將dataframe數據寫入數據庫
data_dataframe.to_sql(table_name, con=engine, if_exists='replace', index=False)
| 參數 | |
| name: | string SQL表的名稱。 |
| con: | sqlalchemy.engine.Engine或sqlite3.Connection 使用SQLAlchemy可以使用該庫支持的任何數據庫。為sqlite3.Connection對象提供了舊版支持。 |
| schema: | string,optional 指定架構(如果數據庫支持)。如果為None,請使用默認架構。 |
| if_exists: | {‘fail’,‘replace’,‘append’},默認’fail’ 如果表已存在的情況如下, * fail:引發ValueError。 * replace:在插入新值之前刪除表。 * append:將新值插入現有表。 |
| index: | 布爾值,默認為True 將DataFrame索引寫為列。使用index_label作為表中的列名。 |
| index_label: | 字符串或序列,默認為None 索引列的列標簽。如果給出None(默認)且 index為True,則使用索引名稱。如果DataFrame使用MultiIndex,則應該給出一個sequence。 |
| chunksize: | int,可選 行將一次批量寫入的數量。默認情況下,所有行都將立即寫入。 |
| dtype: | dict,可選 指定列的數據類型。鍵應該是列名,值應該是SQLAlchemy類型,或sqlite3傳統模式的字符串。 |
總結
以上是生活随笔為你收集整理的pandas将数据从excel导入数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wemall微信商城可以实现支付宝支付么
- 下一篇: Kettle把Excel数据导入数据库