99 datetime ,
1010 time ,
1111)
12+ from distutils .version import LooseVersion
1213from functools import partial
1314import re
1415from typing import (
@@ -77,6 +78,16 @@ def _is_sqlalchemy_connectable(con):
7778 return False
7879
7980
81+ def _gt14 () -> bool :
82+ """
83+ Check if sqlalchemy.__version__ is at least 1.4.0, when several
84+ deprecations were made.
85+ """
86+ import sqlalchemy
87+
88+ return LooseVersion (sqlalchemy .__version__ ) >= LooseVersion ("1.4.0" )
89+
90+
8091def _convert_params (sql , params ):
8192 """Convert SQL and params args to DBAPI2.0 compliant format."""
8293 args = [sql ]
@@ -823,7 +834,10 @@ def sql_schema(self):
823834
824835 def _execute_create (self ):
825836 # Inserting table into database, add to MetaData object
826- self .table = self .table .tometadata (self .pd_sql .meta )
837+ if _gt14 ():
838+ self .table = self .table .to_metadata (self .pd_sql .meta )
839+ else :
840+ self .table = self .table .tometadata (self .pd_sql .meta )
827841 self .table .create ()
828842
829843 def create (self ):
@@ -1596,9 +1610,17 @@ def to_sql(
15961610 # Only check when name is not a number and name is not lower case
15971611 engine = self .connectable .engine
15981612 with self .connectable .connect () as conn :
1599- table_names = engine .table_names (
1600- schema = schema or self .meta .schema , connection = conn
1601- )
1613+ if _gt14 ():
1614+ from sqlalchemy import inspect
1615+
1616+ insp = inspect (conn )
1617+ table_names = insp .get_table_names (
1618+ schema = schema or self .meta .schema
1619+ )
1620+ else :
1621+ table_names = engine .table_names (
1622+ schema = schema or self .meta .schema , connection = conn
1623+ )
16021624 if name not in table_names :
16031625 msg = (
16041626 f"The provided table name '{ name } ' is not found exactly as "
@@ -1613,9 +1635,15 @@ def tables(self):
16131635 return self .meta .tables
16141636
16151637 def has_table (self , name : str , schema : Optional [str ] = None ):
1616- return self .connectable .run_callable (
1617- self .connectable .dialect .has_table , name , schema or self .meta .schema
1618- )
1638+ if _gt14 ():
1639+ import sqlalchemy as sa
1640+
1641+ insp = sa .inspect (self .connectable )
1642+ return insp .has_table (name , schema or self .meta .schema )
1643+ else :
1644+ return self .connectable .run_callable (
1645+ self .connectable .dialect .has_table , name , schema or self .meta .schema
1646+ )
16191647
16201648 def get_table (self , table_name : str , schema : Optional [str ] = None ):
16211649 schema = schema or self .meta .schema
0 commit comments