Skip to content

Commit

Permalink
BUG: AttributeError: 'function' object has no attribute 'currentfram…
Browse files Browse the repository at this point in the history
…e' (pandas-dev#48736)

* sqlalchemy.inspect shouldnt shadow builtin inspect

* 🏷️

* reword in terms of to_sql

* import sqlalchemy.inspect as sqlalchemy_inspect

Co-authored-by: MarcoGorelli <>
  • Loading branch information
MarcoGorelli authored and noatamir committed Nov 9, 2022
1 parent ffbe7e3 commit 69f46d1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v1.5.1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Fixed regressions
- Regression in :func:`.read_csv` causing an ``EmptyDataError`` when using an UTF-8 file handle that was already read from (:issue:`48646`)
- Fixed regression in :meth:`DataFrame.plot` ignoring invalid ``colormap`` for ``kind="scatter"`` (:issue:`48726`)
- Fixed performance regression in :func:`factorize` when ``na_sentinel`` is not ``None`` and ``sort=False`` (:issue:`48620`)
-
- Fixed regression causing an ``AttributeError`` during warning emitted if the provided table name in :meth:`DataFrame.to_sql` and the table name actually used in the database do not match (:issue:`48733`)

.. ---------------------------------------------------------------------------
Expand Down
16 changes: 8 additions & 8 deletions pandas/io/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -1635,8 +1635,8 @@ def prep_table(

def check_case_sensitive(
self,
name,
schema,
name: str,
schema: str | None,
) -> None:
"""
Checks table name for issues with case-sensitivity.
Expand All @@ -1645,10 +1645,10 @@ def check_case_sensitive(
if not name.isdigit() and not name.islower():
# check for potentially case sensitivity issues (GH7815)
# Only check when name is not a number and name is not lower case
from sqlalchemy import inspect
from sqlalchemy import inspect as sqlalchemy_inspect

with self.connectable.connect() as conn:
insp = inspect(conn)
insp = sqlalchemy_inspect(conn)
table_names = insp.get_table_names(schema=schema or self.meta.schema)
if name not in table_names:
msg = (
Expand All @@ -1666,11 +1666,11 @@ def check_case_sensitive(
def to_sql(
self,
frame,
name,
name: str,
if_exists: Literal["fail", "replace", "append"] = "fail",
index: bool = True,
index_label=None,
schema=None,
schema: str | None = None,
chunksize=None,
dtype: DtypeArg | None = None,
method=None,
Expand Down Expand Up @@ -1757,9 +1757,9 @@ def tables(self):
return self.meta.tables

def has_table(self, name: str, schema: str | None = None):
from sqlalchemy import inspect
from sqlalchemy import inspect as sqlalchemy_inspect

insp = inspect(self.connectable)
insp = sqlalchemy_inspect(self.connectable)
return insp.has_table(name, schema or self.meta.schema)

def get_table(self, table_name: str, schema: str | None = None) -> Table:
Expand Down
15 changes: 11 additions & 4 deletions pandas/tests/io/test_sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -1357,10 +1357,17 @@ def test_not_reflect_all_tables(self):

def test_warning_case_insensitive_table_name(self, test_frame1):
# see gh-7815
#
# We can't test that this warning is triggered, a the database
# configuration would have to be altered. But here we test that
# the warning is certainly NOT triggered in a normal case.
with tm.assert_produces_warning(
UserWarning,
match=(
r"The provided table name 'TABLE1' is not found exactly as such in "
r"the database after writing the table, possibly due to case "
r"sensitivity issues. Consider using lower case table names."
),
):
sql.SQLDatabase(self.conn).check_case_sensitive("TABLE1", "")

# Test that the warning is certainly NOT triggered in a normal case.
with tm.assert_produces_warning(None):
test_frame1.to_sql("CaseSensitive", self.conn)

Expand Down

0 comments on commit 69f46d1

Please sign in to comment.