2016-01-13 84 views
4

我目前使用熊貓to_sql爲了將一個大型的數據框放入SQL數據庫。我正在使用sqlalchemy來連接數據庫,並且該進程的一部分正在定義數據庫表的列。Pandas to_sql如何確定將什麼數據幀列放入哪個數據庫字段?

我的問題是,當我在數據框上運行to_sql時,它如何知道數據框中的哪一列進入數據庫的哪個字段?它是否在查看數據框中的列名並在數據庫中查找相同的字段?它是變量的順序嗎?

下面是一些示例代碼,以方便討論:

engine = create_engine('sqlite:///store_data.db') 
meta = MetaData() 

table_pop = Table('xrf_str_geo_ta4_1511', meta, 
    Column('TDLINX',Integer, nullable=True, index=True), 
    Column('GEO_ID',Integer, nullable=True), 
    Column('PERCINCL', Numeric, nullable=True) 
) 

meta.create_all(engine) 

for df in pd.read_csv(file, chunksize=50000, iterator=True, encoding='utf-8', sep=',') 
    df.to_sql('table_name', engine, flavor='sqlite', if_exists='append', index=index) 

有問題的數據幀有3列TDLINX,GEO_ID和PERCINCL

回答

5

答案是確實有什麼建議:它正在尋找在列名。所以匹配列名很重要,順序無關緊要。

爲了完全正確,熊貓不會真正檢查它。 to_sql在底層執行的是執行插入語句,其中要插入的數據是作爲字典提供的,然後由數據庫驅動程序來處理。
這也意味着熊貓不會檢查dtypes或列的數量(例如,如果不是數據庫中的所有字段都作爲數據框中的列存在,則這些行中將填充數據庫中的缺省值)。