Skip to content

Commit f702c78

Browse files
author
Vraj Mohan
committed
ENH: Support index=True for io.sql.get_schema
Closes pandas-dev#9084 - Decided to keep the default as `index=False` to keep the API consistent. `to_sql` has `index=True`. - Tempted to name the parameter `include_dataframe_index` as "index" has a different meaning in a SQL context.
1 parent b9f2e2b commit f702c78

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

pandas/io/sql.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -1222,8 +1222,9 @@ def drop_table(self, table_name, schema=None):
12221222
self.get_table(table_name, schema).drop()
12231223
self.meta.clear()
12241224

1225-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1226-
table = SQLTable(table_name, self, frame=frame, index=False, keys=keys,
1225+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
1226+
index=False):
1227+
table = SQLTable(table_name, self, frame=frame, index=index, keys=keys,
12271228
dtype=dtype)
12281229
return str(table.sql_schema())
12291230

@@ -1564,13 +1565,14 @@ def drop_table(self, name, schema=None):
15641565
name=_get_valid_sqlite_name(name))
15651566
self.execute(drop_sql)
15661567

1567-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1568-
table = SQLiteTable(table_name, self, frame=frame, index=False,
1568+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
1569+
index=False):
1570+
table = SQLiteTable(table_name, self, frame=frame, index=index,
15691571
keys=keys, dtype=dtype)
15701572
return str(table.sql_schema())
15711573

15721574

1573-
def get_schema(frame, name, keys=None, con=None, dtype=None):
1575+
def get_schema(frame, name, keys=None, con=None, dtype=None, index=False):
15741576
"""
15751577
Get the SQL db table schema for the given frame.
15761578
@@ -1592,4 +1594,5 @@ def get_schema(frame, name, keys=None, con=None, dtype=None):
15921594
"""
15931595

15941596
pandas_sql = pandasSQL_builder(con=con)
1595-
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
1597+
return pandas_sql._create_sql_schema(
1598+
frame, name, keys=keys, dtype=dtype, index=index)

pandas/tests/io/test_sql.py

+13
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,19 @@ def test_get_schema_keys(self):
823823
constraint_sentence = 'CONSTRAINT test_pk PRIMARY KEY ("A", "B")'
824824
assert constraint_sentence in create_sql
825825

826+
def test_get_schema_with_index(self):
827+
frame = DataFrame({
828+
'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
829+
'two': pd.Series([1, 2, 3], index=['a', 'b', 'c'])
830+
})
831+
frame.index.name = 'alphabet'
832+
833+
create_sql = sql.get_schema(frame, 'test', con=self.conn)
834+
assert 'alphabet' not in create_sql
835+
836+
create_sql = sql.get_schema(frame, 'test', con=self.conn, index=True)
837+
assert 'alphabet' in create_sql
838+
826839
def test_chunksize_read(self):
827840
df = DataFrame(np.random.randn(22, 5), columns=list('abcde'))
828841
df.to_sql('test_chunksize', self.conn, index=False)

0 commit comments

Comments
 (0)