Skip to content

Commit

Permalink
ENH: Support index=True for io.sql.get_schema
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Vraj Mohan committed Jan 30, 2019
1 parent b9f2e2b commit f702c78
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
15 changes: 9 additions & 6 deletions pandas/io/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -1222,8 +1222,9 @@ def drop_table(self, table_name, schema=None):
self.get_table(table_name, schema).drop()
self.meta.clear()

def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
table = SQLTable(table_name, self, frame=frame, index=False, keys=keys,
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
index=False):
table = SQLTable(table_name, self, frame=frame, index=index, keys=keys,
dtype=dtype)
return str(table.sql_schema())

Expand Down Expand Up @@ -1564,13 +1565,14 @@ def drop_table(self, name, schema=None):
name=_get_valid_sqlite_name(name))
self.execute(drop_sql)

def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
table = SQLiteTable(table_name, self, frame=frame, index=False,
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None,
index=False):
table = SQLiteTable(table_name, self, frame=frame, index=index,
keys=keys, dtype=dtype)
return str(table.sql_schema())


def get_schema(frame, name, keys=None, con=None, dtype=None):
def get_schema(frame, name, keys=None, con=None, dtype=None, index=False):
"""
Get the SQL db table schema for the given frame.
Expand All @@ -1592,4 +1594,5 @@ def get_schema(frame, name, keys=None, con=None, dtype=None):
"""

pandas_sql = pandasSQL_builder(con=con)
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
return pandas_sql._create_sql_schema(
frame, name, keys=keys, dtype=dtype, index=index)
13 changes: 13 additions & 0 deletions pandas/tests/io/test_sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -823,6 +823,19 @@ def test_get_schema_keys(self):
constraint_sentence = 'CONSTRAINT test_pk PRIMARY KEY ("A", "B")'
assert constraint_sentence in create_sql

def test_get_schema_with_index(self):
frame = DataFrame({
'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([1, 2, 3], index=['a', 'b', 'c'])
})
frame.index.name = 'alphabet'

create_sql = sql.get_schema(frame, 'test', con=self.conn)
assert 'alphabet' not in create_sql

create_sql = sql.get_schema(frame, 'test', con=self.conn, index=True)
assert 'alphabet' in create_sql

def test_chunksize_read(self):
df = DataFrame(np.random.randn(22, 5), columns=list('abcde'))
df.to_sql('test_chunksize', self.conn, index=False)
Expand Down

0 comments on commit f702c78

Please sign in to comment.