9
9
datetime ,
10
10
time ,
11
11
)
12
+ from distutils .version import LooseVersion
12
13
from functools import partial
13
14
import re
14
15
from typing import (
@@ -77,6 +78,16 @@ def _is_sqlalchemy_connectable(con):
77
78
return False
78
79
79
80
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
+
80
91
def _convert_params (sql , params ):
81
92
"""Convert SQL and params args to DBAPI2.0 compliant format."""
82
93
args = [sql ]
@@ -823,7 +834,10 @@ def sql_schema(self):
823
834
824
835
def _execute_create (self ):
825
836
# 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 )
827
841
self .table .create ()
828
842
829
843
def create (self ):
@@ -1596,9 +1610,17 @@ def to_sql(
1596
1610
# Only check when name is not a number and name is not lower case
1597
1611
engine = self .connectable .engine
1598
1612
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
+ )
1602
1624
if name not in table_names :
1603
1625
msg = (
1604
1626
f"The provided table name '{ name } ' is not found exactly as "
@@ -1613,9 +1635,15 @@ def tables(self):
1613
1635
return self .meta .tables
1614
1636
1615
1637
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
+ )
1619
1647
1620
1648
def get_table (self , table_name : str , schema : Optional [str ] = None ):
1621
1649
schema = schema or self .meta .schema
0 commit comments