@@ -229,7 +229,8 @@ def read_sql(sql, con, index_col=None, flavor='sqlite', coerce_float=True,
229
229
parse_dates = parse_dates )
230
230
231
231
232
- def to_sql (frame , name , con , flavor = 'sqlite' , if_exists = 'fail' , index = True ):
232
+ def to_sql (frame , name , con , flavor = 'sqlite' , if_exists = 'fail' , index = True ,
233
+ index_label = None ):
233
234
"""
234
235
Write records stored in a DataFrame to a SQL database.
235
236
@@ -251,6 +252,11 @@ def to_sql(frame, name, con, flavor='sqlite', if_exists='fail', index=True):
251
252
- append: If table exists, insert data. Create if does not exist.
252
253
index : boolean, default True
253
254
Write DataFrame index as a column
255
+ index_label : string or sequence, default None
256
+ Column label for index column(s). If None is given (default) and
257
+ `index` is True, then the index names are used.
258
+ A sequence should be given if the DataFrame uses MultiIndex.
259
+
254
260
"""
255
261
pandas_sql = pandasSQL_builder (con , flavor = flavor )
256
262
@@ -259,7 +265,8 @@ def to_sql(frame, name, con, flavor='sqlite', if_exists='fail', index=True):
259
265
elif not isinstance (frame , DataFrame ):
260
266
raise NotImplementedError
261
267
262
- pandas_sql .to_sql (frame , name , if_exists = if_exists , index = index )
268
+ pandas_sql .to_sql (frame , name , if_exists = if_exists , index = index ,
269
+ index_label = index_label )
263
270
264
271
265
272
def has_table (table_name , con , meta = None , flavor = 'sqlite' ):
@@ -377,12 +384,12 @@ class PandasSQLTable(PandasObject):
377
384
"""
378
385
# TODO: support for multiIndex
379
386
def __init__ (self , name , pandas_sql_engine , frame = None , index = True ,
380
- if_exists = 'fail' , prefix = 'pandas' ):
387
+ if_exists = 'fail' , prefix = 'pandas' , index_label = None ):
381
388
self .name = name
382
389
self .pd_sql = pandas_sql_engine
383
390
self .prefix = prefix
384
391
self .frame = frame
385
- self .index = self ._index_name (index )
392
+ self .index = self ._index_name (index , index_label )
386
393
387
394
if frame is not None :
388
395
# We want to write a frame
@@ -473,9 +480,11 @@ def read(self, coerce_float=True, parse_dates=None, columns=None):
473
480
474
481
return self .frame
475
482
476
- def _index_name (self , index ):
483
+ def _index_name (self , index , index_label ):
477
484
if index is True :
478
- if self .frame .index .name is not None :
485
+ if index_label is not None :
486
+ return _safe_col_name (index_label )
487
+ elif self .frame .index .name is not None :
479
488
return _safe_col_name (self .frame .index .name )
480
489
else :
481
490
return self .prefix + '_index'
@@ -652,9 +661,11 @@ def read_sql(self, sql, index_col=None, coerce_float=True,
652
661
653
662
return data_frame
654
663
655
- def to_sql (self , frame , name , if_exists = 'fail' , index = True ):
664
+ def to_sql (self , frame , name , if_exists = 'fail' , index = True ,
665
+ index_label = None ):
656
666
table = PandasSQLTable (
657
- name , self , frame = frame , index = index , if_exists = if_exists )
667
+ name , self , frame = frame , index = index , if_exists = if_exists ,
668
+ index_label = index_label )
658
669
table .insert ()
659
670
660
671
@property
@@ -882,7 +893,8 @@ def _fetchall_as_list(self, cur):
882
893
result = list (result )
883
894
return result
884
895
885
- def to_sql (self , frame , name , if_exists = 'fail' , index = True ):
896
+ def to_sql (self , frame , name , if_exists = 'fail' , index = True ,
897
+ index_label = None ):
886
898
"""
887
899
Write records stored in a DataFrame to a SQL database.
888
900
@@ -895,6 +907,7 @@ def to_sql(self, frame, name, if_exists='fail', index=True):
895
907
fail: If table exists, do nothing.
896
908
replace: If table exists, drop it, recreate it, and insert data.
897
909
append: If table exists, insert data. Create if does not exist.
910
+ index_label : ignored (only used in sqlalchemy mode)
898
911
"""
899
912
table = PandasSQLTableLegacy (
900
913
name , self , frame = frame , index = index , if_exists = if_exists )
0 commit comments