在 Azure Databricks 內的筆記本中,我使用 .csv 檔案將資料從 CSV 檔案加載到 Azure SQL 資料庫表pandas.DataFrame.to_sql。CSV 檔案和 SQL 表中的列順序完全相同。但是他們的名字是不同的。
問題:是否pandas.DataFrame.to_sql仍將資料正確加載到相應的列?例如,如果 CSV 檔案具有列F_Name, L_Name, Age, Gender- 并且 SQL 表具有與fname, lname, person_age,相同的列(順序相同)sex,則資料仍會以相同的順序加載(即 CSV 檔案中的名字列值將轉到 sql 表的第一個名稱列,CSV 檔案的姓氏列值將轉到 sql 表的姓氏列等...)。
備注:csv 檔案大約有 150 列,SQL 表的列數完全相同。csv 檔案定期從外部源加載,列數相同,順序完全相同,但列名有時column1與coluumn_1, .... 等略有不同。因此我們無法控制它們的列名(盡管順序總是相同的名字、姓氏、年齡……)
代碼片段
import pandas as pd
import sqlalchemy as sq
.............
pandasDFrame = pd.read_csv('/dbfs/FileStore/tables/MyFile.csv', header='infer')
pandasDFrame .to_sql(name='MySQLTable', con=engine, if_exists='replace', method='multi', chunksize=1000, index=False,\
dtype={'fname': sq.VARCHAR(15),\
'lname': sq.VARCHAR(15),\
`person_age`: sq.varchar(3),\
`sex` : sq.varchar(10)})
uj5u.com熱心網友回復:
在將資料框附加到表之前,考慮檢索目標表列并將其分配給您的資料框:
with engine.begin() as conn:
result = conn.execute("SELECT TOP 0 * FROM MySQLTable")
cols = [col for col in result.keys()]
pandasDFrame.columns = cols
pandasDFrame.to_sql(
name = 'MySQLTable',
con = engine,
if_exists = 'replace',
method = 'multi',
chunksize = 1000,
index = False,
dtype = {
'fname': sq.VARCHAR(15),
'lname': sq.VARCHAR(15),
'person_age': sq.varchar(3),
'sex': sq.varchar(10)
}
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397070.html
標籤:Python 熊猫 数据框 文件 azure-sql-数据库
下一篇:AWSS3縮略圖“拒絕訪問”
