pandas.DataFrame.to_sql - 源 csv 文件和目标的列顺序 table
pandas.DataFrame.to_sql - column order of source csv file and destination table
在 Azure Databricks 内的笔记本中,我使用 pandas.DataFrame.to_sql
从 CSV 文件将数据加载到 Azure SQL 数据库 table。 CSV 文件和 SQL table 中的列顺序完全相同。但是他们的名字不一样。
问题:pandas.DataFrame.to_sql
还能正确加载数据到相应的列吗?例如,如果 CSV 文件有列 F_Name
、L_Name
、Age
、Gender
- 并且 SQL table 有列(顺序相同) 作为 fname
、lname
、person_age
、sex
,数据是否仍会以相同的顺序加载(即,CSV 文件中的名字列值将转到sql table 的名字列,CSV 文件的姓氏列值将转到 sql table 等...的姓氏列。
备注:csv文件大约有150列,SQLtable的列数完全相同。 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)})
考虑检索目标 table 列并将其分配给您的数据框,然后再将数据框附加到 table:
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)
}
)
在 Azure Databricks 内的笔记本中,我使用 pandas.DataFrame.to_sql
从 CSV 文件将数据加载到 Azure SQL 数据库 table。 CSV 文件和 SQL table 中的列顺序完全相同。但是他们的名字不一样。
问题:pandas.DataFrame.to_sql
还能正确加载数据到相应的列吗?例如,如果 CSV 文件有列 F_Name
、L_Name
、Age
、Gender
- 并且 SQL table 有列(顺序相同) 作为 fname
、lname
、person_age
、sex
,数据是否仍会以相同的顺序加载(即,CSV 文件中的名字列值将转到sql table 的名字列,CSV 文件的姓氏列值将转到 sql table 等...的姓氏列。
备注:csv文件大约有150列,SQLtable的列数完全相同。 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)})
考虑检索目标 table 列并将其分配给您的数据框,然后再将数据框附加到 table:
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)
}
)