@@ -229,7 +229,8 @@ def read_sql(sql, con, index_col=None, flavor='sqlite', coerce_float=True,
229229 parse_dates = parse_dates )
230230
231231
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 ):
233234 """
234235 Write records stored in a DataFrame to a SQL database.
235236
@@ -251,6 +252,11 @@ def to_sql(frame, name, con, flavor='sqlite', if_exists='fail', index=True):
251252 - append: If table exists, insert data. Create if does not exist.
252253 index : boolean, default True
253254 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+
254260 """
255261 pandas_sql = pandasSQL_builder (con , flavor = flavor )
256262
@@ -259,7 +265,8 @@ def to_sql(frame, name, con, flavor='sqlite', if_exists='fail', index=True):
259265 elif not isinstance (frame , DataFrame ):
260266 raise NotImplementedError
261267
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 )
263270
264271
265272def has_table (table_name , con , meta = None , flavor = 'sqlite' ):
@@ -377,12 +384,12 @@ class PandasSQLTable(PandasObject):
377384 """
378385 # TODO: support for multiIndex
379386 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 ):
381388 self .name = name
382389 self .pd_sql = pandas_sql_engine
383390 self .prefix = prefix
384391 self .frame = frame
385- self .index = self ._index_name (index )
392+ self .index = self ._index_name (index , index_label )
386393
387394 if frame is not None :
388395 # We want to write a frame
@@ -473,9 +480,11 @@ def read(self, coerce_float=True, parse_dates=None, columns=None):
473480
474481 return self .frame
475482
476- def _index_name (self , index ):
483+ def _index_name (self , index , index_label ):
477484 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 :
479488 return _safe_col_name (self .frame .index .name )
480489 else :
481490 return self .prefix + '_index'
@@ -652,9 +661,11 @@ def read_sql(self, sql, index_col=None, coerce_float=True,
652661
653662 return data_frame
654663
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 ):
656666 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 )
658669 table .insert ()
659670
660671 @property
@@ -882,7 +893,8 @@ def _fetchall_as_list(self, cur):
882893 result = list (result )
883894 return result
884895
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 ):
886898 """
887899 Write records stored in a DataFrame to a SQL database.
888900
@@ -895,6 +907,7 @@ def to_sql(self, frame, name, if_exists='fail', index=True):
895907 fail: If table exists, do nothing.
896908 replace: If table exists, drop it, recreate it, and insert data.
897909 append: If table exists, insert data. Create if does not exist.
910+ index_label : ignored (only used in sqlalchemy mode)
898911 """
899912 table = PandasSQLTableLegacy (
900913 name , self , frame = frame , index = index , if_exists = if_exists )
0 commit comments