Skip to content

Commit ad62533

Browse files
committed
gh9084_get_schema_index_parameter
1 parent 2ea0601 commit ad62533

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

pandas/io/sql.py

+19-8
Original file line numberDiff line numberDiff line change
@@ -1299,9 +1299,10 @@ def drop_table(self, table_name, schema=None):
12991299
self.get_table(table_name, schema).drop()
13001300
self.meta.clear()
13011301

1302-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1303-
table = SQLTable(table_name, self, frame=frame, index=False, keys=keys,
1304-
dtype=dtype)
1302+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
1303+
index=False, index_label=None):
1304+
table = SQLTable(table_name, self, frame=frame, index=index, keys=keys,
1305+
dtype=dtype, index_label=index_label)
13051306
return str(table.sql_schema())
13061307

13071308

@@ -1683,13 +1684,14 @@ def drop_table(self, name, schema=None):
16831684
drop_sql = "DROP TABLE %s" % escape(name)
16841685
self.execute(drop_sql)
16851686

1686-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1687-
table = SQLiteTable(table_name, self, frame=frame, index=False,
1688-
keys=keys, dtype=dtype)
1687+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
1688+
index=False, index_label=None):
1689+
table = SQLiteTable(table_name, self, frame=frame, index=index,
1690+
keys=keys, dtype=dtype, index_label=index_label)
16891691
return str(table.sql_schema())
16901692

16911693

1692-
def get_schema(frame, name, flavor='sqlite', keys=None, con=None, dtype=None):
1694+
def get_schema(frame, name, flavor='sqlite', keys=None, con=None, dtype=None, index=False, index_label=None):
16931695
"""
16941696
Get the SQL db table schema for the given frame.
16951697
@@ -1711,8 +1713,17 @@ def get_schema(frame, name, flavor='sqlite', keys=None, con=None, dtype=None):
17111713
dtype : dict of column name to SQL type, default None
17121714
Optional specifying the datatype for columns. The SQL type should
17131715
be a SQLAlchemy type, or a string for sqlite3 fallback connection.
1716+
index : boolean, default False (for backwards compatibility)
1717+
Write DataFrame index as a column.
1718+
.. versionadded:: 0.18.1
17141719
1720+
index_label : string or sequence, default None
1721+
Column label for index column(s). If None is given (default) and
1722+
`index` is True, then the index names are used.
1723+
A sequence should be given if the DataFrame uses MultiIndex.
1724+
.. versionadded:: 0.18.1
17151725
"""
17161726

17171727
pandas_sql = pandasSQL_builder(con=con, flavor=flavor)
1718-
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
1728+
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype,
1729+
index=index, index_label=index_label)

pandas/io/tests/test_sql.py

+15
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,21 @@ def test_get_schema_keys(self):
788788
constraint_sentence = 'CONSTRAINT test_pk PRIMARY KEY ("A", "B")'
789789
self.assertTrue(constraint_sentence in create_sql)
790790

791+
def test_get_schema_index(self):
792+
# support index=True (GH9084)
793+
frame = DataFrame({'col':[1,2,3]}, index=pd.date_range('2012-01-01', periods=3))
794+
create_sql = sql.get_schema(frame, 'test_schema', index=False)
795+
self.assertFalse('index' in create_sql)
796+
self.assertFalse('CREATE INDEX' in create_sql)
797+
798+
create_sql = sql.get_schema(frame, 'test_schema', index=True)
799+
self.assertTrue('index' in create_sql)
800+
self.assertTrue('CREATE INDEX "ix_test_schema_index"ON "test_schema" ("index")' in create_sql)
801+
802+
create_sql = sql.get_schema(frame, 'test_schema', index=True, index_label="idx")
803+
self.assertTrue('idx' in create_sql)
804+
self.assertTrue('CREATE INDEX "ix_test_schema_idx"ON "test_schema" ("idx")' in create_sql)
805+
791806
def test_chunksize_read(self):
792807
df = DataFrame(np.random.randn(22, 5), columns=list('abcde'))
793808
df.to_sql('test_chunksize', self.conn, index=False)

0 commit comments

Comments
 (0)