Skip to content

Commit 3e62959

Browse files
Added schema kwarg and test
1 parent 6367bd2 commit 3e62959

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

doc/source/whatsnew/v1.1.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ Other enhancements
9999
``df.to_csv(path, compression={'method': 'gzip', 'compresslevel': 1}``
100100
(:issue:`33196`)
101101
- :meth:`~pandas.core.groupby.GroupBy.transform` has gained ``engine`` and ``engine_kwargs`` arguments that supports executing functions with ``Numba`` (:issue:`32854`)
102+
- :meth:`get_schema` will now allow a schema kwarg that will add a schema into the create table statement (:issue:`28486`)
102103
-
103104

104105
.. ---------------------------------------------------------------------------

pandas/io/sql.py

+25-7
Original file line numberDiff line numberDiff line change
@@ -1360,9 +1360,15 @@ def drop_table(self, table_name, schema=None):
13601360
self.get_table(table_name, schema).drop()
13611361
self.meta.clear()
13621362

1363-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1363+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None, schema=None):
13641364
table = SQLTable(
1365-
table_name, self, frame=frame, index=False, keys=keys, dtype=dtype
1365+
table_name,
1366+
self,
1367+
frame=frame,
1368+
index=False,
1369+
keys=keys,
1370+
dtype=dtype,
1371+
schema=schema,
13661372
)
13671373
return str(table.sql_schema())
13681374

@@ -1493,9 +1499,13 @@ def _create_table_setup(self):
14931499
create_tbl_stmts.append(
14941500
f"CONSTRAINT {self.name}_pk PRIMARY KEY ({cnames_br})"
14951501
)
1496-
1502+
if self.schema:
1503+
schema_to_add = self.schema + "."
1504+
else:
1505+
schema_to_add = ""
14971506
create_stmts = [
14981507
"CREATE TABLE "
1508+
+ schema_to_add
14991509
+ escape(self.name)
15001510
+ " (\n"
15011511
+ ",\n ".join(create_tbl_stmts)
@@ -1750,14 +1760,20 @@ def drop_table(self, name, schema=None):
17501760
drop_sql = f"DROP TABLE {_get_valid_sqlite_name(name)}"
17511761
self.execute(drop_sql)
17521762

1753-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1763+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None, schema=None):
17541764
table = SQLiteTable(
1755-
table_name, self, frame=frame, index=False, keys=keys, dtype=dtype
1765+
table_name,
1766+
self,
1767+
frame=frame,
1768+
index=False,
1769+
keys=keys,
1770+
dtype=dtype,
1771+
schema=schema,
17561772
)
17571773
return str(table.sql_schema())
17581774

17591775

1760-
def get_schema(frame, name, keys=None, con=None, dtype=None):
1776+
def get_schema(frame, name, keys=None, con=None, dtype=None, schema=None):
17611777
"""
17621778
Get the SQL db table schema for the given frame.
17631779
@@ -1778,4 +1794,6 @@ def get_schema(frame, name, keys=None, con=None, dtype=None):
17781794
17791795
"""
17801796
pandas_sql = pandasSQL_builder(con=con)
1781-
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
1797+
return pandas_sql._create_sql_schema(
1798+
frame, name, keys=keys, dtype=dtype, schema=schema
1799+
)

pandas/tests/io/test_sql.py

+6
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,12 @@ def test_get_schema(self):
855855
create_sql = sql.get_schema(self.test_frame1, "test", con=self.conn)
856856
assert "CREATE" in create_sql
857857

858+
def test_get_schema_with_schema(self):
859+
create_sql = sql.get_schema(
860+
self.test_frame1, "test", con=self.conn, schema="pypi"
861+
)
862+
assert "CREATE TABLE pypi." in create_sql
863+
858864
def test_get_schema_dtypes(self):
859865
float_frame = DataFrame({"a": [1.1, 1.2], "b": [2.1, 2.2]})
860866
dtype = sqlalchemy.Integer if self.mode == "sqlalchemy" else "INTEGER"

0 commit comments

Comments
 (0)