Skip to content

Commit 546edb6

Browse files
Added schema kwarg and test
Added what's new cleaned up code so that it follows flake8
1 parent 7673357 commit 546edb6

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

doc/source/whatsnew/v1.1.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Other enhancements
8787
- Positional slicing on a :class:`IntervalIndex` now supports slices with ``step > 1`` (:issue:`31658`)
8888
- :class:`Series.str` now has a `fullmatch` method that matches a regular expression against the entire string in each row of the series, similar to `re.fullmatch` (:issue:`32806`).
8989
- :meth:`DataFrame.sample` will now also allow array-like and BitGenerator objects to be passed to ``random_state`` as seeds (:issue:`32503`)
90-
-
90+
- :meth:`get_schema` will now allow a schema kwarg that will add a schema into the create table statement
9191

9292
.. ---------------------------------------------------------------------------
9393

pandas/io/sql.py

+26-7
Original file line numberDiff line numberDiff line change
@@ -1371,9 +1371,15 @@ def drop_table(self, table_name, schema=None):
13711371
self.get_table(table_name, schema).drop()
13721372
self.meta.clear()
13731373

1374-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1374+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None, schema=None):
13751375
table = SQLTable(
1376-
table_name, self, frame=frame, index=False, keys=keys, dtype=dtype
1376+
table_name,
1377+
self,
1378+
frame=frame,
1379+
index=False,
1380+
keys=keys,
1381+
dtype=dtype,
1382+
schema=schema,
13771383
)
13781384
return str(table.sql_schema())
13791385

@@ -1439,6 +1445,7 @@ def __init__(self, *args, **kwargs):
14391445
# (this is what sqlalchemy does)
14401446
sqlite3.register_adapter(time, lambda _: _.strftime("%H:%M:%S.%f"))
14411447
super().__init__(*args, **kwargs)
1448+
print(self.table)
14421449

14431450
def sql_schema(self):
14441451
return str(";\n".join(self.table))
@@ -1504,9 +1511,13 @@ def _create_table_setup(self):
15041511
create_tbl_stmts.append(
15051512
f"CONSTRAINT {self.name}_pk PRIMARY KEY ({cnames_br})"
15061513
)
1507-
1514+
if self.schema:
1515+
schema_to_add = self.schema + "."
1516+
else:
1517+
schema_to_add = ""
15081518
create_stmts = [
15091519
"CREATE TABLE "
1520+
+ schema_to_add
15101521
+ escape(self.name)
15111522
+ " (\n"
15121523
+ ",\n ".join(create_tbl_stmts)
@@ -1761,14 +1772,20 @@ def drop_table(self, name, schema=None):
17611772
drop_sql = f"DROP TABLE {_get_valid_sqlite_name(name)}"
17621773
self.execute(drop_sql)
17631774

1764-
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None):
1775+
def _create_sql_schema(self, frame, table_name, keys=None, dtype=None, schema=None):
17651776
table = SQLiteTable(
1766-
table_name, self, frame=frame, index=False, keys=keys, dtype=dtype
1777+
table_name,
1778+
self,
1779+
frame=frame,
1780+
index=False,
1781+
keys=keys,
1782+
dtype=dtype,
1783+
schema=schema,
17671784
)
17681785
return str(table.sql_schema())
17691786

17701787

1771-
def get_schema(frame, name, keys=None, con=None, dtype=None):
1788+
def get_schema(frame, name, keys=None, con=None, dtype=None, schema=None):
17721789
"""
17731790
Get the SQL db table schema for the given frame.
17741791
@@ -1789,4 +1806,6 @@ def get_schema(frame, name, keys=None, con=None, dtype=None):
17891806
17901807
"""
17911808
pandas_sql = pandasSQL_builder(con=con)
1792-
return pandas_sql._create_sql_schema(frame, name, keys=keys, dtype=dtype)
1809+
return pandas_sql._create_sql_schema(
1810+
frame, name, keys=keys, dtype=dtype, schema=schema
1811+
)

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 "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)