Skip to content

Commit f012f07

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 ea013a2 commit f012f07

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
@@ -1223,8 +1223,9 @@ def drop_table(self, table_name, schema=None):
12231223
self.get_table(table_name, schema).drop()
12241224
self.meta.clear()
12251225

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

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

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

15731575

1574-
def get_schema(frame, name, keys=None, con=None, dtype=None):
1576+
def get_schema(frame, name, keys=None, con=None, dtype=None, index=False):
15751577
"""
15761578
Get the SQL db table schema for the given frame.
15771579
@@ -1593,4 +1595,5 @@ def get_schema(frame, name, keys=None, con=None, dtype=None):
15931595
"""
15941596

15951597
pandas_sql = pandasSQL_builder(con=con)
1596-
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
1598+
return pandas_sql._create_sql_schema(
1599+
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)