This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 8f8331f656e chore: session enforce sqlalchemy 2.0 (#42365)
8f8331f656e is described below

commit 8f8331f656e294bc5c1d0def497539eb35994571
Author: Hans Yu <[email protected]>
AuthorDate: Mon Jul 27 04:28:42 2026 +0200

    chore: session enforce sqlalchemy 2.0 (#42365)
    
    Co-authored-by: Evan Rusackas <[email protected]>
    Co-authored-by: Claude Fable 5 <[email protected]>
---
 .pre-commit-config.yaml                                           | 2 +-
 superset/commands/streaming_export/base.py                        | 2 +-
 superset/migrations/shared/catalogs.py                            | 4 ++--
 .../2016-04-25_08-54_c3a8f8611885_materializing_permission.py     | 2 +-
 ...16-06-07_12-33_d8bc074f7aad_add_new_field_is_restricted_to_.py | 2 +-
 .../versions/2016-06-27_08-43_27ae655e4247_make_creator_owners.py | 2 +-
 .../versions/2016-09-07_23-50_33d996bcc382_update_slice_model.py  | 4 ++--
 .../2016-09-22_11-31_eca4694defa7_sqllab_setting_defaults.py      | 2 +-
 .../2017-01-24_12-31_db0c65b146bd_update_slice_model_json.py      | 2 +-
 ...08_14-16_a99f2f7c195a_rewriting_url_from_shortner_with_new_.py | 2 +-
 .../2017-12-08_08-19_67a6ac9b727b_update_spatial_params.py        | 2 +-
 .../2017-12-17_11-06_21e88bc06c02_annotation_migration.py         | 4 ++--
 .../versions/2018-02-13_08-07_e866bd2d4976_smaller_grid.py        | 4 ++--
 .../versions/2018-04-03_08-19_130915240929_is_sqllab_viz_flow.py  | 2 +-
 ...2018-04-10_11-19_bf706ae5eb46_cal_heatmap_metric_to_metrics.py | 2 +-
 .../versions/2018-06-04_11-12_c5756bec8b47_time_grain_sqla.py     | 4 ++--
 .../2018-06-07_09-52_afb7730f6a9c_remove_empty_filters.py         | 2 +-
 .../2018-06-13_10-20_4451805bbaa1_remove_double_percents.py       | 2 +-
 .../versions/2018-06-13_14-54_bddc498dd179_adhoc_filters.py       | 4 ++--
 .../2018-06-14_14-31_80a67c5192fa_single_pie_chart_metric.py      | 4 ++--
 ...5_15-19_3dda56f1c4c6_migrate_num_period_compare_and_period_.py | 4 ++--
 .../versions/2018-07-19_23-41_c617da68de7d_form_nullable.py       | 2 +-
 .../versions/2018-07-20_15-31_7f2635b51f5d_update_base_columns.py | 2 +-
 .../versions/2018-07-20_15-57_e9df189e5c7e_update_base_metrics.py | 2 +-
 ...018-07-22_11-59_bebcf3fed1fe_convert_dashboard_v1_positions.py | 2 +-
 superset/migrations/versions/2018-08-01_11-47_7fcdcde0761c_.py    | 2 +-
 ...2_13-31_4ce8df208545_migrate_time_range_for_default_filters.py | 2 +-
 .../versions/2018-12-11_22-03_fb13d49b72f9_better_filters.py      | 4 ++--
 ...8-12-15_12-34_3e1b21cd94a4_change_owner_to_m2m_relation_on_.py | 2 +-
 .../versions/2019-03-21_10-22_d94d33dbe938_form_strip.py          | 2 +-
 ...04-09_16-27_80aa3f04bc82_add_parent_ids_in_dashboard_layout.py | 4 ++--
 .../migrations/versions/2019-06-28_13-17_ab8c66efdd01_resample.py | 4 ++--
 ...0188938582_adding_unique_constraint_on_dashboard_slices_tbl.py | 2 +-
 ...19-09-11_21-49_5afa9079866a_serialize_schema_permissions_py.py | 2 +-
 ...-40_258b5280a45e_form_strip_leading_and_trailing_whitespace.py | 2 +-
 .../versions/2019-10-10_13-52_1495eb914ad3_time_range.py          | 4 ++--
 ...1-06_15-23_78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py | 2 +-
 .../2020-02-07_14-13_3325d4caccc8_dashboard_scoped_filters.py     | 2 +-
 .../2020-03-25_10-42_f9a30386bd74_cleanup_time_grainularity.py    | 2 +-
 .../2020-04-29_09-24_620241d1153f_update_time_grain_sqla.py       | 2 +-
 ...20-08-12_00-24_978245563a02_migrate_iframe_to_dash_markdown.py | 2 +-
 ...12-04_3fbbc6e8d654_fix_data_access_permissions_for_virtual_.py | 2 +-
 ...20-09-28_17-57_b56500de1855_add_uuid_column_to_import_mixin.py | 4 ++--
 ..._18-10_af30ca79208f_collapse_alerting_models_into_a_single_.py | 4 ++--
 ...0-10-21_21-09_96e99fb176a0_add_import_mixing_to_saved_query.py | 4 ++--
 ...20-11-20_14-24_e38177dbf641_security_converge_saved_queries.py | 4 ++--
 .../2020-11-30_15-25_40f16acf1ba7_security_converge_reports.py    | 4 ++--
 ...20-11-30_17-54_8ee129739cf9_security_converge_css_templates.py | 4 ++--
 .../2020-12-09_14-13_ccb74baaa89b_security_converge_charts.py     | 4 ++--
 .../2020-12-10_15-05_45731db65d9c_security_converge_datasets.py   | 4 ++--
 .../2020-12-11_11-45_1f6dca87d1a2_security_converge_dashboards.py | 4 ++--
 ...2020-12-11_17-02_c25cb2c78727_security_converge_annotations.py | 4 ++--
 .../2020-12-14_10-49_42b4c9e01447_security_converge_databases.py  | 4 ++--
 .../2020-12-14_13-40_4b84f97828aa_security_converge_logs.py       | 4 ++--
 .../2020-12-16_12-15_e37912a26567_security_converge_queries.py    | 4 ++--
 ...1-01-23_16-25_260bf0649a77_migrate_x_dateunit_in_time_range.py | 2 +-
 ..._09-34_070c043f2fdb_add_granularity_to_charts_where_missing.py | 2 +-
 .../2021-02-10_12-32_41ce8799acc3_rename_pie_label_type.py        | 4 ++--
 ...21-02-14_11-46_1412ec1e5a7b_legacy_force_directed_to_echart.py | 4 ++--
 .../2021-02-18_09-13_c501b7c653a3_add_missing_uuid_column.py      | 2 +-
 ...21-03-24_09-47_989bbe479899_rename_filter_configuration_in_.py | 4 ++--
 ...4-07_07-21_134cea61c5e7_remove_dataset_health_check_message.py | 2 +-
 ...9_16-14_085f06488938_country_map_use_lowercase_country_name.py | 4 ++--
 ...-04-12_12-38_fc3a3a8ff221_migrate_filter_sets_to_new_format.py | 4 ++--
 ...-29_15-32_f1410ed7ec95_migrate_native_filters_to_new_schema.py | 4 ++--
 ...08-02_16-39_e323605f370a_fix_schemas_allowed_for_csv_upload.py | 2 +-
 ..._15-36_143b6f2815da_migrate_pivot_table_v2_heatmaps_to_new_.py | 2 +-
 .../2021-08-04_17-16_f6196627326f_update_chart_permissions.py     | 4 ++--
 ...09_17-32_07071313dd52_change_fetch_values_predicate_to_text.py | 2 +-
 ..._11-37_021b81fe4fbb_add_type_to_native_filter_configuration.py | 4 ++--
 ...9-27_11-31_60dc453f4e2e_migrate_timeseries_limit_metric_to_.py | 2 +-
 .../2021-10-12_11-15_32646df09c64_update_time_grain_sqla.py       | 2 +-
 ...1-11_04-18_0ca9e5f1dacd_rename_to_schemas_allowed_for_file_.py | 4 ++--
 ...0_19-25_bb38f40aa3ff_add_force_screenshot_to_alerts_reports.py | 2 +-
 ...13_14-06_fe23025b9441_rename_big_viz_total_form_data_fields.py | 4 ++--
 ..._16-56_31bb738bd1d2_move_pivot_table_v2_legacy_order_by_to_.py | 4 ++--
 ...02_09-20_b5a422d8e252_fix_query_and_saved_query_null_schema.py | 2 +-
 ...3-02_16-41_7293b0ca7944_change_adhoc_filter_b_from_none_to_.py | 4 ++--
 .../2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py    | 2 +-
 ...-04-04_15-04_b0d0249074e4_deprecate_time_range_endpoints_v2.py | 2 +-
 ...-04-18_11-20_ad07e4fdbaba_rm_time_range_endpoints_from_qc_3.py | 2 +-
 .../2022-05-03_19-39_cbe71abde154_fix_report_schedule_and_log.py  | 2 +-
 .../2022-05-18_16-07_e786798587de_delete_none_permissions.py      | 2 +-
 .../2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py     | 2 +-
 .../2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py | 4 ++--
 .../2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py   | 2 +-
 .../2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py     | 4 ++--
 .../2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py        | 4 ++--
 ..._15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py | 2 +-
 ...2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py | 2 +-
 .../2023-02-28_14-46_c0a3ea245b61_remove_show_native_filters.py   | 2 +-
 ...-03-05_10-06_d0ac08bb5b83_invert_horizontal_bar_chart_order.py | 4 ++--
 .../2023-03-17_13-24_b5ea9d343307_bar_chart_stack_options.py      | 4 ++--
 .../versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py | 2 +-
 ...-05-01_12-03_9c2a5681ddfd_convert_key_value_entries_to_json.py | 4 ++--
 .../2023-05-11_12-41_4ea966691069_cross_filter_global_scoping.py  | 4 ++--
 .../2023-06-08_09-02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py | 4 ++--
 .../2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py        | 4 ++--
 ...3-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py | 4 ++--
 ...0_863adcf72773_delete_obsolete_druid_nosql_slice_parameters.py | 2 +-
 ...7-19_16-48_a23c6f8b1280_cleanup_erroneous_parent_filter_ids.py | 2 +-
 .../2023-07-19_17-54_ee179a490af9_deckgl_path_width_units.py      | 2 +-
 .../2023-08-02_15-23_0769ef90fddd_fix_schema_perm_for_datasets.py | 2 +-
 ...8-14_09-38_9f4a086c2676_add_normalize_columns_to_sqla_model.py | 2 +-
 ...23-09-06_13-18_317970b4400c_added_time_secondary_column_to_.py | 2 +-
 ...-15_17-58_06dd9ff00fe8_add_percent_calculation_type_funnel_.py | 4 ++--
 .../2024-01-18_14-41_a32e0c4d8646_migrate_sunburst_chart.py       | 4 ++--
 ...8_15-20_214f580d09c9_migrate_filter_boxes_to_native_filters.py | 2 +-
 ...07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py | 4 ++--
 .../2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py | 4 ++--
 .../2024-04-08_15-43_5ad7321c2169_mig_new_csv_upload_perm.py      | 4 ++--
 .../2024-04-17_14-04_d60591c5515f_mig_new_excel_upload_perm.py    | 4 ++--
 .../2024-04-26_12-36_4a33124c18ad_mig_new_columnar_upload_perm.py | 4 ++--
 ...0_18-02_f84fde59123a_update_charts_with_old_time_comparison.py | 4 ++--
 .../2025-01-08_09-34_d482d51c15ca_remove_legacy_plugins_5_0.py    | 4 ++--
 .../2025-01-22_14-34_74ad1125881c_converge_upload_permissions.py  | 4 ++--
 ...13_22-10_378cecfdba9f_merge_x_axis_sort_series_with_x_axis_.py | 4 ++--
 ...-39_363a9b1e8992_convert_metric_currencies_from_str_to_json.py | 2 +-
 ...16_12-00_f5b5f88d8526_fix_form_data_string_in_query_context.py | 2 +-
 .../2026-03-02_00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py    | 4 ++--
 ...26-03-02_12-00_a1b2c3d4e5f6_add_granular_export_permissions.py | 4 ++--
 .../2026-05-29_00-00_b4a3f2e1d0c9_fix_security_view_menu_case.py  | 2 +-
 .../2026-06-23_03-23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py | 4 ++--
 ...d24e6b0a9c7f_strip_metricsqlexpressions_from_ag_grid_params.py | 2 +-
 superset/tags/models.py                                           | 2 +-
 tests/integration_tests/dao/conftest.py                           | 2 +-
 tests/unit_tests/conftest.py                                      | 2 +-
 tests/unit_tests/databases/filters_test.py                        | 2 +-
 tests/unit_tests/distributed_lock/distributed_lock_tests.py       | 2 +-
 .../test_strip_metricsqlexpressions_from_ag_grid_params.py        | 6 +++---
 tests/unit_tests/security/exclude_users_filter_test.py            | 8 ++++----
 tests/unit_tests/versioning/test_listener.py                      | 2 +-
 tests/unit_tests/views/test_soft_delete_filter.py                 | 2 +-
 133 files changed, 199 insertions(+), 199 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index bbdbf569f10..c1dea2582a8 100755
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -144,7 +144,7 @@ repos:
               git fetch --no-recurse-submodules origin "$TARGET_BRANCH" 
2>/dev/null || true
             fi
             BASE=$(git merge-base origin/"$TARGET_BRANCH" HEAD 2>/dev/null) || 
BASE="HEAD"
-            files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 
2>/dev/null | grep '^superset/.*\.py$' || true)
+            files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 
2>/dev/null | grep '^superset/.*\.py$' | grep -v '^superset/migrations/' || 
true)
             if [ -n "$files" ]; then
               pylint --rcfile=.pylintrc 
--load-plugins=superset.extensions.pylint --reports=no $files
             else
diff --git a/superset/commands/streaming_export/base.py 
b/superset/commands/streaming_export/base.py
index d28f437725b..70e5f6ef6d4 100644
--- a/superset/commands/streaming_export/base.py
+++ b/superset/commands/streaming_export/base.py
@@ -219,7 +219,7 @@ class BaseStreamingCSVExportCommand(BaseCommand):
         delimiter = csv_export_config.get("sep", ",")
         decimal_separator = csv_export_config.get("decimal", ".")
 
-        with db.session() as session:
+        with db.session(future=True) as session:
             # Merge database to prevent DetachedInstanceError
             merged_database = session.merge(database)
 
diff --git a/superset/migrations/shared/catalogs.py 
b/superset/migrations/shared/catalogs.py
index 77f1bcf188f..9cb98af26ea 100644
--- a/superset/migrations/shared/catalogs.py
+++ b/superset/migrations/shared/catalogs.py
@@ -376,7 +376,7 @@ def upgrade_catalog_perms(engines: set[str] | None = None) 
-> None:
 
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # The Database model has an eager-loaded (``lazy="joined"``) ``ssh_tunnel``
     # backref. Eager-loading it here would SELECT every column on 
``ssh_tunnels``,
@@ -581,7 +581,7 @@ def downgrade_catalog_perms(engines: set[str] | None = 
None) -> None:
     WARNING: models (datasets and charts) not in the default catalog are 
deleted!
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # See upgrade_catalog_perms: avoid eager-loading the ``ssh_tunnel`` 
backref so the
     # query stays schema-safe across migration revisions.
diff --git 
a/superset/migrations/versions/2016-04-25_08-54_c3a8f8611885_materializing_permission.py
 
b/superset/migrations/versions/2016-04-25_08-54_c3a8f8611885_materializing_permission.py
index 748975fd560..0c742c70862 100644
--- 
a/superset/migrations/versions/2016-04-25_08-54_c3a8f8611885_materializing_permission.py
+++ 
b/superset/migrations/versions/2016-04-25_08-54_c3a8f8611885_materializing_permission.py
@@ -51,7 +51,7 @@ class Slice(Base):
 def upgrade():
     bind = op.get_bind()
     op.add_column("slices", sa.Column("perm", sa.String(length=2000), 
nullable=True))
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Use Slice class defined here instead of models.Slice
     for slc in session.query(Slice).all():
diff --git 
a/superset/migrations/versions/2016-06-07_12-33_d8bc074f7aad_add_new_field_is_restricted_to_.py
 
b/superset/migrations/versions/2016-06-07_12-33_d8bc074f7aad_add_new_field_is_restricted_to_.py
index 748ed4b3658..223c0d6eb87 100644
--- 
a/superset/migrations/versions/2016-06-07_12-33_d8bc074f7aad_add_new_field_is_restricted_to_.py
+++ 
b/superset/migrations/versions/2016-06-07_12-33_d8bc074f7aad_add_new_field_is_restricted_to_.py
@@ -59,7 +59,7 @@ def upgrade():
     )
 
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # don't use models.DruidMetric
     # because it assumes the context is consistent with the application
diff --git 
a/superset/migrations/versions/2016-06-27_08-43_27ae655e4247_make_creator_owners.py
 
b/superset/migrations/versions/2016-06-27_08-43_27ae655e4247_make_creator_owners.py
index 8164e76875b..95a6b0735c3 100644
--- 
a/superset/migrations/versions/2016-06-27_08-43_27ae655e4247_make_creator_owners.py
+++ 
b/superset/migrations/versions/2016-06-27_08-43_27ae655e4247_make_creator_owners.py
@@ -94,7 +94,7 @@ class Dashboard(AuditMixin, Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     objects = session.query(Slice).all()
     objects += session.query(Dashboard).all()
diff --git 
a/superset/migrations/versions/2016-09-07_23-50_33d996bcc382_update_slice_model.py
 
b/superset/migrations/versions/2016-09-07_23-50_33d996bcc382_update_slice_model.py
index 79da3e3e790..ded43bb58ca 100644
--- 
a/superset/migrations/versions/2016-09-07_23-50_33d996bcc382_update_slice_model.py
+++ 
b/superset/migrations/versions/2016-09-07_23-50_33d996bcc382_update_slice_model.py
@@ -50,7 +50,7 @@ class Slice(Base):
 def upgrade():
     bind = op.get_bind()
     op.add_column("slices", sa.Column("datasource_id", sa.Integer()))
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         if slc.druid_datasource_id:
@@ -63,7 +63,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     for slc in session.query(Slice).all():
         if slc.datasource_type == "druid":
             slc.druid_datasource_id = slc.datasource_id
diff --git 
a/superset/migrations/versions/2016-09-22_11-31_eca4694defa7_sqllab_setting_defaults.py
 
b/superset/migrations/versions/2016-09-22_11-31_eca4694defa7_sqllab_setting_defaults.py
index 06a83803da7..d1f9884b140 100644
--- 
a/superset/migrations/versions/2016-09-22_11-31_eca4694defa7_sqllab_setting_defaults.py
+++ 
b/superset/migrations/versions/2016-09-22_11-31_eca4694defa7_sqllab_setting_defaults.py
@@ -45,7 +45,7 @@ class Database(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for obj in session.query(Database).all():
         obj.allow_run_sync = True
diff --git 
a/superset/migrations/versions/2017-01-24_12-31_db0c65b146bd_update_slice_model_json.py
 
b/superset/migrations/versions/2017-01-24_12-31_db0c65b146bd_update_slice_model_json.py
index 387c14bb608..e41b563a4ef 100644
--- 
a/superset/migrations/versions/2017-01-24_12-31_db0c65b146bd_update_slice_model_json.py
+++ 
b/superset/migrations/versions/2017-01-24_12-31_db0c65b146bd_update_slice_model_json.py
@@ -48,7 +48,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).all()
     slice_len = len(slices)
diff --git 
a/superset/migrations/versions/2017-02-08_14-16_a99f2f7c195a_rewriting_url_from_shortner_with_new_.py
 
b/superset/migrations/versions/2017-02-08_14-16_a99f2f7c195a_rewriting_url_from_shortner_with_new_.py
index a03588fb6ef..3754867eeb3 100644
--- 
a/superset/migrations/versions/2017-02-08_14-16_a99f2f7c195a_rewriting_url_from_shortner_with_new_.py
+++ 
b/superset/migrations/versions/2017-02-08_14-16_a99f2f7c195a_rewriting_url_from_shortner_with_new_.py
@@ -61,7 +61,7 @@ class Url(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     urls = session.query(Url).all()
     urls_len = len(urls)
diff --git 
a/superset/migrations/versions/2017-12-08_08-19_67a6ac9b727b_update_spatial_params.py
 
b/superset/migrations/versions/2017-12-08_08-19_67a6ac9b727b_update_spatial_params.py
index c2c1ee8dbd6..36dabd086fe 100644
--- 
a/superset/migrations/versions/2017-12-08_08-19_67a6ac9b727b_update_spatial_params.py
+++ 
b/superset/migrations/versions/2017-12-08_08-19_67a6ac9b727b_update_spatial_params.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type.like("deck_%")):
         params = json.loads(slc.params)
diff --git 
a/superset/migrations/versions/2017-12-17_11-06_21e88bc06c02_annotation_migration.py
 
b/superset/migrations/versions/2017-12-17_11-06_21e88bc06c02_annotation_migration.py
index 45c5588961c..9d9167c264b 100644
--- 
a/superset/migrations/versions/2017-12-17_11-06_21e88bc06c02_annotation_migration.py
+++ 
b/superset/migrations/versions/2017-12-17_11-06_21e88bc06c02_annotation_migration.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(
         or_(Slice.viz_type.like("line"), Slice.viz_type.like("bar"))
@@ -75,7 +75,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(
         or_(Slice.viz_type.like("line"), Slice.viz_type.like("bar"))
diff --git 
a/superset/migrations/versions/2018-02-13_08-07_e866bd2d4976_smaller_grid.py 
b/superset/migrations/versions/2018-02-13_08-07_e866bd2d4976_smaller_grid.py
index cc85cce3e72..65121c70fda 100644
--- a/superset/migrations/versions/2018-02-13_08-07_e866bd2d4976_smaller_grid.py
+++ b/superset/migrations/versions/2018-02-13_08-07_e866bd2d4976_smaller_grid.py
@@ -46,7 +46,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
@@ -68,7 +68,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
diff --git 
a/superset/migrations/versions/2018-04-03_08-19_130915240929_is_sqllab_viz_flow.py
 
b/superset/migrations/versions/2018-04-03_08-19_130915240929_is_sqllab_viz_flow.py
index 0efed690f54..7704f75168a 100644
--- 
a/superset/migrations/versions/2018-04-03_08-19_130915240929_is_sqllab_viz_flow.py
+++ 
b/superset/migrations/versions/2018-04-03_08-19_130915240929_is_sqllab_viz_flow.py
@@ -57,7 +57,7 @@ def upgrade():
         ),
     )
 
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Use Slice class defined here instead of models.Slice
     for tbl in session.query(Table).all():
diff --git 
a/superset/migrations/versions/2018-04-10_11-19_bf706ae5eb46_cal_heatmap_metric_to_metrics.py
 
b/superset/migrations/versions/2018-04-10_11-19_bf706ae5eb46_cal_heatmap_metric_to_metrics.py
index e96750bdb07..a3d0308818c 100644
--- 
a/superset/migrations/versions/2018-04-10_11-19_bf706ae5eb46_cal_heatmap_metric_to_metrics.py
+++ 
b/superset/migrations/versions/2018-04-10_11-19_bf706ae5eb46_cal_heatmap_metric_to_metrics.py
@@ -49,7 +49,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter_by(viz_type="cal_heatmap").all()
     slice_len = len(slices)
diff --git 
a/superset/migrations/versions/2018-06-04_11-12_c5756bec8b47_time_grain_sqla.py 
b/superset/migrations/versions/2018-06-04_11-12_c5756bec8b47_time_grain_sqla.py
index f1d48a085c8..5c2eee08ff6 100644
--- 
a/superset/migrations/versions/2018-06-04_11-12_c5756bec8b47_time_grain_sqla.py
+++ 
b/superset/migrations/versions/2018-06-04_11-12_c5756bec8b47_time_grain_sqla.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
@@ -63,7 +63,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2018-06-07_09-52_afb7730f6a9c_remove_empty_filters.py
 
b/superset/migrations/versions/2018-06-07_09-52_afb7730f6a9c_remove_empty_filters.py
index e67462e1598..d2a601760f9 100644
--- 
a/superset/migrations/versions/2018-06-07_09-52_afb7730f6a9c_remove_empty_filters.py
+++ 
b/superset/migrations/versions/2018-06-07_09-52_afb7730f6a9c_remove_empty_filters.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2018-06-13_10-20_4451805bbaa1_remove_double_percents.py
 
b/superset/migrations/versions/2018-06-13_10-20_4451805bbaa1_remove_double_percents.py
index 8d0d7d1a5e7..f347206bad2 100644
--- 
a/superset/migrations/versions/2018-06-13_10-20_4451805bbaa1_remove_double_percents.py
+++ 
b/superset/migrations/versions/2018-06-13_10-20_4451805bbaa1_remove_double_percents.py
@@ -68,7 +68,7 @@ class Database(Base):
 
 
 def replace(source, target):
-    with db.Session(bind=op.get_bind()) as session:
+    with db.Session(bind=op.get_bind(), future=True) as session:
         with session.begin():
             query = (
                 session.query(Slice, Database)
diff --git 
a/superset/migrations/versions/2018-06-13_14-54_bddc498dd179_adhoc_filters.py 
b/superset/migrations/versions/2018-06-13_14-54_bddc498dd179_adhoc_filters.py
index 0d7fd3051e5..e84cb6a8607 100644
--- 
a/superset/migrations/versions/2018-06-13_14-54_bddc498dd179_adhoc_filters.py
+++ 
b/superset/migrations/versions/2018-06-13_14-54_bddc498dd179_adhoc_filters.py
@@ -50,7 +50,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
@@ -66,7 +66,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2018-06-14_14-31_80a67c5192fa_single_pie_chart_metric.py
 
b/superset/migrations/versions/2018-06-14_14-31_80a67c5192fa_single_pie_chart_metric.py
index 8a7dbeaf407..c7ba9141711 100644
--- 
a/superset/migrations/versions/2018-06-14_14-31_80a67c5192fa_single_pie_chart_metric.py
+++ 
b/superset/migrations/versions/2018-06-14_14-31_80a67c5192fa_single_pie_chart_metric.py
@@ -47,7 +47,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == "pie").all():
         try:
@@ -68,7 +68,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == "pie").all():
         try:
diff --git 
a/superset/migrations/versions/2018-07-05_15-19_3dda56f1c4c6_migrate_num_period_compare_and_period_.py
 
b/superset/migrations/versions/2018-07-05_15-19_3dda56f1c4c6_migrate_num_period_compare_and_period_.py
index 7db90149a83..bf2a230cfdc 100644
--- 
a/superset/migrations/versions/2018-07-05_15-19_3dda56f1c4c6_migrate_num_period_compare_and_period_.py
+++ 
b/superset/migrations/versions/2018-07-05_15-19_3dda56f1c4c6_migrate_num_period_compare_and_period_.py
@@ -134,7 +134,7 @@ def compute_time_compare(granularity, periods):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for chart in session.query(Slice):
         params = json.loads(chart.params or "{}")
@@ -163,7 +163,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for chart in session.query(Slice):
         params = json.loads(chart.params or "{}")
diff --git 
a/superset/migrations/versions/2018-07-19_23-41_c617da68de7d_form_nullable.py 
b/superset/migrations/versions/2018-07-19_23-41_c617da68de7d_form_nullable.py
index 63bf45ece27..808e24a63db 100644
--- 
a/superset/migrations/versions/2018-07-19_23-41_c617da68de7d_form_nullable.py
+++ 
b/superset/migrations/versions/2018-07-19_23-41_c617da68de7d_form_nullable.py
@@ -159,7 +159,7 @@ class TableColumn(BaseColumnMixin, Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     tables = [
         Annotation,
diff --git 
a/superset/migrations/versions/2018-07-20_15-31_7f2635b51f5d_update_base_columns.py
 
b/superset/migrations/versions/2018-07-20_15-31_7f2635b51f5d_update_base_columns.py
index 637b26f7a35..ca02ef0bb24 100644
--- 
a/superset/migrations/versions/2018-07-20_15-31_7f2635b51f5d_update_base_columns.py
+++ 
b/superset/migrations/versions/2018-07-20_15-31_7f2635b51f5d_update_base_columns.py
@@ -59,7 +59,7 @@ class TableColumn(BaseColumnMixin, Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Delete the orphaned columns records.
     for record in session.query(DruidColumn).all():
diff --git 
a/superset/migrations/versions/2018-07-20_15-57_e9df189e5c7e_update_base_metrics.py
 
b/superset/migrations/versions/2018-07-20_15-57_e9df189e5c7e_update_base_metrics.py
index 5addda200cf..570bc02f19d 100644
--- 
a/superset/migrations/versions/2018-07-20_15-57_e9df189e5c7e_update_base_metrics.py
+++ 
b/superset/migrations/versions/2018-07-20_15-57_e9df189e5c7e_update_base_metrics.py
@@ -59,7 +59,7 @@ class SqlMetric(BaseMetricMixin, Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Delete the orphaned metrics records.
     for record in session.query(DruidMetric).all():
diff --git 
a/superset/migrations/versions/2018-07-22_11-59_bebcf3fed1fe_convert_dashboard_v1_positions.py
 
b/superset/migrations/versions/2018-07-22_11-59_bebcf3fed1fe_convert_dashboard_v1_positions.py
index 731945f45f8..a3ba04be279 100644
--- 
a/superset/migrations/versions/2018-07-22_11-59_bebcf3fed1fe_convert_dashboard_v1_positions.py
+++ 
b/superset/migrations/versions/2018-07-22_11-59_bebcf3fed1fe_convert_dashboard_v1_positions.py
@@ -579,7 +579,7 @@ def scan_dashboard_positions_data(positions):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
diff --git a/superset/migrations/versions/2018-08-01_11-47_7fcdcde0761c_.py 
b/superset/migrations/versions/2018-08-01_11-47_7fcdcde0761c_.py
index ef891a210ac..4c8cda051c7 100644
--- a/superset/migrations/versions/2018-08-01_11-47_7fcdcde0761c_.py
+++ b/superset/migrations/versions/2018-08-01_11-47_7fcdcde0761c_.py
@@ -55,7 +55,7 @@ def is_v2_dash(positions):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):  # noqa: B007
diff --git 
a/superset/migrations/versions/2018-11-12_13-31_4ce8df208545_migrate_time_range_for_default_filters.py
 
b/superset/migrations/versions/2018-11-12_13-31_4ce8df208545_migrate_time_range_for_default_filters.py
index 33ad74942e0..379671cf3b0 100644
--- 
a/superset/migrations/versions/2018-11-12_13-31_4ce8df208545_migrate_time_range_for_default_filters.py
+++ 
b/superset/migrations/versions/2018-11-12_13-31_4ce8df208545_migrate_time_range_for_default_filters.py
@@ -46,7 +46,7 @@ class Dashboard(Base):
 
 def upgrade():  # noqa: C901
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
diff --git 
a/superset/migrations/versions/2018-12-11_22-03_fb13d49b72f9_better_filters.py 
b/superset/migrations/versions/2018-12-11_22-03_fb13d49b72f9_better_filters.py
index 916ed554968..64fab00f95c 100644
--- 
a/superset/migrations/versions/2018-12-11_22-03_fb13d49b72f9_better_filters.py
+++ 
b/superset/migrations/versions/2018-12-11_22-03_fb13d49b72f9_better_filters.py
@@ -75,7 +75,7 @@ def upgrade_slice(slc):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     filter_box_slices = session.query(Slice).filter_by(viz_type="filter_box")
     for slc in filter_box_slices.all():
@@ -90,7 +90,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     filter_box_slices = session.query(Slice).filter_by(viz_type="filter_box")
     for slc in filter_box_slices.all():
diff --git 
a/superset/migrations/versions/2018-12-15_12-34_3e1b21cd94a4_change_owner_to_m2m_relation_on_.py
 
b/superset/migrations/versions/2018-12-15_12-34_3e1b21cd94a4_change_owner_to_m2m_relation_on_.py
index 7a1b43331bc..b69f15281fc 100644
--- 
a/superset/migrations/versions/2018-12-15_12-34_3e1b21cd94a4_change_owner_to_m2m_relation_on_.py
+++ 
b/superset/migrations/versions/2018-12-15_12-34_3e1b21cd94a4_change_owner_to_m2m_relation_on_.py
@@ -87,7 +87,7 @@ def upgrade():
 
     bind = op.get_bind()
     insp = sa.engine.reflection.Inspector.from_engine(bind)
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     tables = session.query(SqlaTable).all()
     for table in tables:
diff --git 
a/superset/migrations/versions/2019-03-21_10-22_d94d33dbe938_form_strip.py 
b/superset/migrations/versions/2019-03-21_10-22_d94d33dbe938_form_strip.py
index 5a744dd925c..340ee8d3265 100644
--- a/superset/migrations/versions/2019-03-21_10-22_d94d33dbe938_form_strip.py
+++ b/superset/migrations/versions/2019-03-21_10-22_d94d33dbe938_form_strip.py
@@ -159,7 +159,7 @@ class TableColumn(BaseColumnMixin, Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     tables = [
         Annotation,
diff --git 
a/superset/migrations/versions/2019-04-09_16-27_80aa3f04bc82_add_parent_ids_in_dashboard_layout.py
 
b/superset/migrations/versions/2019-04-09_16-27_80aa3f04bc82_add_parent_ids_in_dashboard_layout.py
index 8df0554dcea..12504488bf5 100644
--- 
a/superset/migrations/versions/2019-04-09_16-27_80aa3f04bc82_add_parent_ids_in_dashboard_layout.py
+++ 
b/superset/migrations/versions/2019-04-09_16-27_80aa3f04bc82_add_parent_ids_in_dashboard_layout.py
@@ -62,7 +62,7 @@ def add_parent_ids(node, layout):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
@@ -88,7 +88,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
diff --git 
a/superset/migrations/versions/2019-06-28_13-17_ab8c66efdd01_resample.py 
b/superset/migrations/versions/2019-06-28_13-17_ab8c66efdd01_resample.py
index a9060680bdb..c5b4708da87 100644
--- a/superset/migrations/versions/2019-06-28_13-17_ab8c66efdd01_resample.py
+++ b/superset/migrations/versions/2019-06-28_13-17_ab8c66efdd01_resample.py
@@ -47,7 +47,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
@@ -94,7 +94,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2019-07-15_12-00_190188938582_adding_unique_constraint_on_dashboard_slices_tbl.py
 
b/superset/migrations/versions/2019-07-15_12-00_190188938582_adding_unique_constraint_on_dashboard_slices_tbl.py
index 59ca97c4100..7697521bd67 100644
--- 
a/superset/migrations/versions/2019-07-15_12-00_190188938582_adding_unique_constraint_on_dashboard_slices_tbl.py
+++ 
b/superset/migrations/versions/2019-07-15_12-00_190188938582_adding_unique_constraint_on_dashboard_slices_tbl.py
@@ -46,7 +46,7 @@ class DashboardSlices(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # find dup records in dashboard_slices tbl
     dup_records = (
diff --git 
a/superset/migrations/versions/2019-09-11_21-49_5afa9079866a_serialize_schema_permissions_py.py
 
b/superset/migrations/versions/2019-09-11_21-49_5afa9079866a_serialize_schema_permissions_py.py
index 99424e06007..e0378995a27 100644
--- 
a/superset/migrations/versions/2019-09-11_21-49_5afa9079866a_serialize_schema_permissions_py.py
+++ 
b/superset/migrations/versions/2019-09-11_21-49_5afa9079866a_serialize_schema_permissions_py.py
@@ -71,7 +71,7 @@ def upgrade():
     op.add_column("tables", Column("schema_perm", String(length=1000), 
nullable=True))
 
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     for t in session.query(Sqlatable).all():
         db_name = (
             t.database.verbose_name
diff --git 
a/superset/migrations/versions/2019-09-19_13-40_258b5280a45e_form_strip_leading_and_trailing_whitespace.py
 
b/superset/migrations/versions/2019-09-19_13-40_258b5280a45e_form_strip_leading_and_trailing_whitespace.py
index 8838d43980f..c0bfecee6f2 100644
--- 
a/superset/migrations/versions/2019-09-19_13-40_258b5280a45e_form_strip_leading_and_trailing_whitespace.py
+++ 
b/superset/migrations/versions/2019-09-19_13-40_258b5280a45e_form_strip_leading_and_trailing_whitespace.py
@@ -161,7 +161,7 @@ down_revision = "11c737c17cc6"
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     tables = [
         Annotation,
diff --git 
a/superset/migrations/versions/2019-10-10_13-52_1495eb914ad3_time_range.py 
b/superset/migrations/versions/2019-10-10_13-52_1495eb914ad3_time_range.py
index 3ae6d7c8b4c..0d2e1db2a33 100644
--- a/superset/migrations/versions/2019-10-10_13-52_1495eb914ad3_time_range.py
+++ b/superset/migrations/versions/2019-10-10_13-52_1495eb914ad3_time_range.py
@@ -48,7 +48,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
@@ -63,7 +63,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2019-11-06_15-23_78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py
 
b/superset/migrations/versions/2019-11-06_15-23_78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py
index 228b6adc62c..c169fad6ab7 100644
--- 
a/superset/migrations/versions/2019-11-06_15-23_78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py
+++ 
b/superset/migrations/versions/2019-11-06_15-23_78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py
@@ -53,7 +53,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         if slc.params:
diff --git 
a/superset/migrations/versions/2020-02-07_14-13_3325d4caccc8_dashboard_scoped_filters.py
 
b/superset/migrations/versions/2020-02-07_14-13_3325d4caccc8_dashboard_scoped_filters.py
index b2b589a4ced..1c3010a7a9f 100644
--- 
a/superset/migrations/versions/2020-02-07_14-13_3325d4caccc8_dashboard_scoped_filters.py
+++ 
b/superset/migrations/versions/2020-02-07_14-13_3325d4caccc8_dashboard_scoped_filters.py
@@ -69,7 +69,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = session.query(Dashboard).all()
     for i, dashboard in enumerate(dashboards):
diff --git 
a/superset/migrations/versions/2020-03-25_10-42_f9a30386bd74_cleanup_time_grainularity.py
 
b/superset/migrations/versions/2020-03-25_10-42_f9a30386bd74_cleanup_time_grainularity.py
index 69771c42b0e..3a90d5bf6ff 100644
--- 
a/superset/migrations/versions/2020-03-25_10-42_f9a30386bd74_cleanup_time_grainularity.py
+++ 
b/superset/migrations/versions/2020-03-25_10-42_f9a30386bd74_cleanup_time_grainularity.py
@@ -56,7 +56,7 @@ def upgrade():
     """
 
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Visualization types which support time granularity (hence negate).
     viz_types = [
diff --git 
a/superset/migrations/versions/2020-04-29_09-24_620241d1153f_update_time_grain_sqla.py
 
b/superset/migrations/versions/2020-04-29_09-24_620241d1153f_update_time_grain_sqla.py
index 361d459ce1e..90c245bfe1c 100644
--- 
a/superset/migrations/versions/2020-04-29_09-24_620241d1153f_update_time_grain_sqla.py
+++ 
b/superset/migrations/versions/2020-04-29_09-24_620241d1153f_update_time_grain_sqla.py
@@ -74,7 +74,7 @@ def duration_by_name(database: Database):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     query = (
         session.query(Slice, Database)
diff --git 
a/superset/migrations/versions/2020-08-12_00-24_978245563a02_migrate_iframe_to_dash_markdown.py
 
b/superset/migrations/versions/2020-08-12_00-24_978245563a02_migrate_iframe_to_dash_markdown.py
index 0628e49fdf9..75bae7e47ec 100644
--- 
a/superset/migrations/versions/2020-08-12_00-24_978245563a02_migrate_iframe_to_dash_markdown.py
+++ 
b/superset/migrations/versions/2020-08-12_00-24_978245563a02_migrate_iframe_to_dash_markdown.py
@@ -89,7 +89,7 @@ def create_new_markdown_component(chart_position, url):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dash_to_migrate = defaultdict(list)
     iframe_urls = defaultdict(list)
diff --git 
a/superset/migrations/versions/2020-09-24_12-04_3fbbc6e8d654_fix_data_access_permissions_for_virtual_.py
 
b/superset/migrations/versions/2020-09-24_12-04_3fbbc6e8d654_fix_data_access_permissions_for_virtual_.py
index 0e9a70ddc8c..5eabe3f1618 100644
--- 
a/superset/migrations/versions/2020-09-24_12-04_3fbbc6e8d654_fix_data_access_permissions_for_virtual_.py
+++ 
b/superset/migrations/versions/2020-09-24_12-04_3fbbc6e8d654_fix_data_access_permissions_for_virtual_.py
@@ -152,7 +152,7 @@ def upgrade():  # noqa: C901
     """
 
     bind = op.get_bind()
-    session = orm.Session(bind=bind)
+    session = orm.Session(bind=bind, future=True)
 
     faulty_view_menus = (
         session.query(ViewMenu)
diff --git 
a/superset/migrations/versions/2020-09-28_17-57_b56500de1855_add_uuid_column_to_import_mixin.py
 
b/superset/migrations/versions/2020-09-28_17-57_b56500de1855_add_uuid_column_to_import_mixin.py
index e282621951f..d417c134efc 100644
--- 
a/superset/migrations/versions/2020-09-28_17-57_b56500de1855_add_uuid_column_to_import_mixin.py
+++ 
b/superset/migrations/versions/2020-09-28_17-57_b56500de1855_add_uuid_column_to_import_mixin.py
@@ -119,7 +119,7 @@ def update_dashboards(session, uuid_map):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for table_name, model in models.items():
         with op.batch_alter_table(table_name) as batch_op:
@@ -151,7 +151,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # remove uuid from position_json
     update_dashboards(session, {})
diff --git 
a/superset/migrations/versions/2020-10-05_18-10_af30ca79208f_collapse_alerting_models_into_a_single_.py
 
b/superset/migrations/versions/2020-10-05_18-10_af30ca79208f_collapse_alerting_models_into_a_single_.py
index 0cf53ff9a1b..e3d748ed36e 100644
--- 
a/superset/migrations/versions/2020-10-05_18-10_af30ca79208f_collapse_alerting_models_into_a_single_.py
+++ 
b/superset/migrations/versions/2020-10-05_18-10_af30ca79208f_collapse_alerting_models_into_a_single_.py
@@ -135,7 +135,7 @@ def upgrade():
             ),
         )
     # Migrate data
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     alerts = session.query(Alert).all()
     for a in alerts:
         if a.sql_observer:
@@ -224,7 +224,7 @@ def downgrade():
     )
 
     # Migrate data
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     alerts = session.query(Alert).all()
     for a in alerts:
         if a.sql:
diff --git 
a/superset/migrations/versions/2020-10-21_21-09_96e99fb176a0_add_import_mixing_to_saved_query.py
 
b/superset/migrations/versions/2020-10-21_21-09_96e99fb176a0_add_import_mixing_to_saved_query.py
index 1a5d1f3814d..be9d6ed0489 100644
--- 
a/superset/migrations/versions/2020-10-21_21-09_96e99fb176a0_add_import_mixing_to_saved_query.py
+++ 
b/superset/migrations/versions/2020-10-21_21-09_96e99fb176a0_add_import_mixing_to_saved_query.py
@@ -56,7 +56,7 @@ default_batch_size = int(os.environ.get("BATCH_SIZE", 200))
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # Add uuid column
     try:
@@ -86,7 +86,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)  # noqa: F841
+    session = db.Session(bind=bind, future=True)  # noqa: F841
 
     # Remove uuid column
     with op.batch_alter_table("saved_query") as batch_op:
diff --git 
a/superset/migrations/versions/2020-11-20_14-24_e38177dbf641_security_converge_saved_queries.py
 
b/superset/migrations/versions/2020-11-20_14-24_e38177dbf641_security_converge_saved_queries.py
index bf033c65146..96a601b7196 100644
--- 
a/superset/migrations/versions/2020-11-20_14-24_e38177dbf641_security_converge_saved_queries.py
+++ 
b/superset/migrations/versions/2020-11-20_14-24_e38177dbf641_security_converge_saved_queries.py
@@ -93,7 +93,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -107,7 +107,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-11-30_15-25_40f16acf1ba7_security_converge_reports.py
 
b/superset/migrations/versions/2020-11-30_15-25_40f16acf1ba7_security_converge_reports.py
index 4535b793b36..7c26ca9fb25 100644
--- 
a/superset/migrations/versions/2020-11-30_15-25_40f16acf1ba7_security_converge_reports.py
+++ 
b/superset/migrations/versions/2020-11-30_15-25_40f16acf1ba7_security_converge_reports.py
@@ -65,7 +65,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -79,7 +79,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-11-30_17-54_8ee129739cf9_security_converge_css_templates.py
 
b/superset/migrations/versions/2020-11-30_17-54_8ee129739cf9_security_converge_css_templates.py
index 7a57de74285..1f472aea3f5 100644
--- 
a/superset/migrations/versions/2020-11-30_17-54_8ee129739cf9_security_converge_css_templates.py
+++ 
b/superset/migrations/versions/2020-11-30_17-54_8ee129739cf9_security_converge_css_templates.py
@@ -77,7 +77,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -91,7 +91,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-09_14-13_ccb74baaa89b_security_converge_charts.py
 
b/superset/migrations/versions/2020-12-09_14-13_ccb74baaa89b_security_converge_charts.py
index 7697b4981c1..79fc0839bb7 100644
--- 
a/superset/migrations/versions/2020-12-09_14-13_ccb74baaa89b_security_converge_charts.py
+++ 
b/superset/migrations/versions/2020-12-09_14-13_ccb74baaa89b_security_converge_charts.py
@@ -101,7 +101,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -115,7 +115,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-10_15-05_45731db65d9c_security_converge_datasets.py
 
b/superset/migrations/versions/2020-12-10_15-05_45731db65d9c_security_converge_datasets.py
index 645ee7e58f8..a2289320bf0 100644
--- 
a/superset/migrations/versions/2020-12-10_15-05_45731db65d9c_security_converge_datasets.py
+++ 
b/superset/migrations/versions/2020-12-10_15-05_45731db65d9c_security_converge_datasets.py
@@ -87,7 +87,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -101,7 +101,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-11_11-45_1f6dca87d1a2_security_converge_dashboards.py
 
b/superset/migrations/versions/2020-12-11_11-45_1f6dca87d1a2_security_converge_dashboards.py
index e72fb416e22..e85efeb3486 100644
--- 
a/superset/migrations/versions/2020-12-11_11-45_1f6dca87d1a2_security_converge_dashboards.py
+++ 
b/superset/migrations/versions/2020-12-11_11-45_1f6dca87d1a2_security_converge_dashboards.py
@@ -101,7 +101,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -115,7 +115,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-11_17-02_c25cb2c78727_security_converge_annotations.py
 
b/superset/migrations/versions/2020-12-11_17-02_c25cb2c78727_security_converge_annotations.py
index eedc721c987..d85241aa2c3 100644
--- 
a/superset/migrations/versions/2020-12-11_17-02_c25cb2c78727_security_converge_annotations.py
+++ 
b/superset/migrations/versions/2020-12-11_17-02_c25cb2c78727_security_converge_annotations.py
@@ -89,7 +89,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -103,7 +103,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-14_10-49_42b4c9e01447_security_converge_databases.py
 
b/superset/migrations/versions/2020-12-14_10-49_42b4c9e01447_security_converge_databases.py
index a56a514a4b3..2de44b0d477 100644
--- 
a/superset/migrations/versions/2020-12-14_10-49_42b4c9e01447_security_converge_databases.py
+++ 
b/superset/migrations/versions/2020-12-14_10-49_42b4c9e01447_security_converge_databases.py
@@ -80,7 +80,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -94,7 +94,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-14_13-40_4b84f97828aa_security_converge_logs.py
 
b/superset/migrations/versions/2020-12-14_13-40_4b84f97828aa_security_converge_logs.py
index 284b7f7525e..4ecd41d2bd7 100644
--- 
a/superset/migrations/versions/2020-12-14_13-40_4b84f97828aa_security_converge_logs.py
+++ 
b/superset/migrations/versions/2020-12-14_13-40_4b84f97828aa_security_converge_logs.py
@@ -55,7 +55,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -69,7 +69,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2020-12-16_12-15_e37912a26567_security_converge_queries.py
 
b/superset/migrations/versions/2020-12-16_12-15_e37912a26567_security_converge_queries.py
index 8c2b1b6c5df..788ff84b125 100644
--- 
a/superset/migrations/versions/2020-12-16_12-15_e37912a26567_security_converge_queries.py
+++ 
b/superset/migrations/versions/2020-12-16_12-15_e37912a26567_security_converge_queries.py
@@ -47,7 +47,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -61,7 +61,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2021-01-23_16-25_260bf0649a77_migrate_x_dateunit_in_time_range.py
 
b/superset/migrations/versions/2021-01-23_16-25_260bf0649a77_migrate_x_dateunit_in_time_range.py
index 5899b5230ed..9158de7804c 100644
--- 
a/superset/migrations/versions/2021-01-23_16-25_260bf0649a77_migrate_x_dateunit_in_time_range.py
+++ 
b/superset/migrations/versions/2021-01-23_16-25_260bf0649a77_migrate_x_dateunit_in_time_range.py
@@ -53,7 +53,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     x_dateunit_in_since = DateRangeMigration.x_dateunit_in_since
     x_dateunit_in_until = DateRangeMigration.x_dateunit_in_until
 
diff --git 
a/superset/migrations/versions/2021-02-04_09-34_070c043f2fdb_add_granularity_to_charts_where_missing.py
 
b/superset/migrations/versions/2021-02-04_09-34_070c043f2fdb_add_granularity_to_charts_where_missing.py
index f8f97b003e6..7e3d7895ef7 100644
--- 
a/superset/migrations/versions/2021-02-04_09-34_070c043f2fdb_add_granularity_to_charts_where_missing.py
+++ 
b/superset/migrations/versions/2021-02-04_09-34_070c043f2fdb_add_granularity_to_charts_where_missing.py
@@ -74,7 +74,7 @@ def upgrade():
     - If no dttm columns exist in the dataset, don't change the chart.
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices_changed = 0
 
diff --git 
a/superset/migrations/versions/2021-02-10_12-32_41ce8799acc3_rename_pie_label_type.py
 
b/superset/migrations/versions/2021-02-10_12-32_41ce8799acc3_rename_pie_label_type.py
index 7e5de7cab16..5c5a8cedd02 100644
--- 
a/superset/migrations/versions/2021-02-10_12-32_41ce8799acc3_rename_pie_label_type.py
+++ 
b/superset/migrations/versions/2021-02-10_12-32_41ce8799acc3_rename_pie_label_type.py
@@ -47,7 +47,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = (
         session.query(Slice)
@@ -75,7 +75,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = (
         session.query(Slice)
diff --git 
a/superset/migrations/versions/2021-02-14_11-46_1412ec1e5a7b_legacy_force_directed_to_echart.py
 
b/superset/migrations/versions/2021-02-14_11-46_1412ec1e5a7b_legacy_force_directed_to_echart.py
index 5111d8f5a0b..382a85e3b83 100644
--- 
a/superset/migrations/versions/2021-02-14_11-46_1412ec1e5a7b_legacy_force_directed_to_echart.py
+++ 
b/superset/migrations/versions/2021-02-14_11-46_1412ec1e5a7b_legacy_force_directed_to_echart.py
@@ -46,7 +46,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in 
session.query(Slice).filter(Slice.viz_type.like("directed_force")):
         params = json.loads(slc.params)
@@ -75,7 +75,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type.like("graph_chart")):
         params = json.loads(slc.params)
diff --git 
a/superset/migrations/versions/2021-02-18_09-13_c501b7c653a3_add_missing_uuid_column.py
 
b/superset/migrations/versions/2021-02-18_09-13_c501b7c653a3_add_missing_uuid_column.py
index 198f8777b85..93e645e7e1b 100644
--- 
a/superset/migrations/versions/2021-02-18_09-13_c501b7c653a3_add_missing_uuid_column.py
+++ 
b/superset/migrations/versions/2021-02-18_09-13_c501b7c653a3_add_missing_uuid_column.py
@@ -62,7 +62,7 @@ def has_uuid_column(table_name, bind):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for table_name, model in models.items():
         # this script adds missing uuid columns
diff --git 
a/superset/migrations/versions/2021-03-24_09-47_989bbe479899_rename_filter_configuration_in_.py
 
b/superset/migrations/versions/2021-03-24_09-47_989bbe479899_rename_filter_configuration_in_.py
index 2452a1db0a6..5cc03f23f54 100644
--- 
a/superset/migrations/versions/2021-03-24_09-47_989bbe479899_rename_filter_configuration_in_.py
+++ 
b/superset/migrations/versions/2021-03-24_09-47_989bbe479899_rename_filter_configuration_in_.py
@@ -46,7 +46,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
@@ -74,7 +74,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
diff --git 
a/superset/migrations/versions/2021-04-07_07-21_134cea61c5e7_remove_dataset_health_check_message.py
 
b/superset/migrations/versions/2021-04-07_07-21_134cea61c5e7_remove_dataset_health_check_message.py
index db95c5e9527..5a4a2f80090 100644
--- 
a/superset/migrations/versions/2021-04-07_07-21_134cea61c5e7_remove_dataset_health_check_message.py
+++ 
b/superset/migrations/versions/2021-04-07_07-21_134cea61c5e7_remove_dataset_health_check_message.py
@@ -47,7 +47,7 @@ class SqlaTable(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for datasource in session.query(SqlaTable):
         if datasource.extra:
diff --git 
a/superset/migrations/versions/2021-04-09_16-14_085f06488938_country_map_use_lowercase_country_name.py
 
b/superset/migrations/versions/2021-04-09_16-14_085f06488938_country_map_use_lowercase_country_name.py
index 8808f9c7a04..471072d78e8 100644
--- 
a/superset/migrations/versions/2021-04-09_16-14_085f06488938_country_map_use_lowercase_country_name.py
+++ 
b/superset/migrations/versions/2021-04-09_16-14_085f06488938_country_map_use_lowercase_country_name.py
@@ -49,7 +49,7 @@ def upgrade():
     Convert all country names to lowercase
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == 
"country_map").all():
         try:
@@ -69,7 +69,7 @@ def downgrade():
     Convert all country names to sentence case
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == 
"country_map").all():
         try:
diff --git 
a/superset/migrations/versions/2021-04-12_12-38_fc3a3a8ff221_migrate_filter_sets_to_new_format.py
 
b/superset/migrations/versions/2021-04-12_12-38_fc3a3a8ff221_migrate_filter_sets_to_new_format.py
index ed8a4cf5cdd..077dfe53d76 100644
--- 
a/superset/migrations/versions/2021-04-12_12-38_fc3a3a8ff221_migrate_filter_sets_to_new_format.py
+++ 
b/superset/migrations/versions/2021-04-12_12-38_fc3a3a8ff221_migrate_filter_sets_to_new_format.py
@@ -172,7 +172,7 @@ def downgrade_filter_set(filter_set: dict[str, Any]) -> int:
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
@@ -208,7 +208,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
diff --git 
a/superset/migrations/versions/2021-04-29_15-32_f1410ed7ec95_migrate_native_filters_to_new_schema.py
 
b/superset/migrations/versions/2021-04-29_15-32_f1410ed7ec95_migrate_native_filters_to_new_schema.py
index a6ed50883b2..66cc5c4ae80 100644
--- 
a/superset/migrations/versions/2021-04-29_15-32_f1410ed7ec95_migrate_native_filters_to_new_schema.py
+++ 
b/superset/migrations/versions/2021-04-29_15-32_f1410ed7ec95_migrate_native_filters_to_new_schema.py
@@ -94,7 +94,7 @@ def upgrade_dashboard(dashboard: dict[str, Any]) -> 
tuple[int, int]:
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
@@ -136,7 +136,7 @@ def downgrade_dashboard(dashboard: dict[str, Any]) -> 
tuple[int, int]:
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
diff --git 
a/superset/migrations/versions/2021-08-02_16-39_e323605f370a_fix_schemas_allowed_for_csv_upload.py
 
b/superset/migrations/versions/2021-08-02_16-39_e323605f370a_fix_schemas_allowed_for_csv_upload.py
index 3862c247a7a..046d3b22e60 100644
--- 
a/superset/migrations/versions/2021-08-02_16-39_e323605f370a_fix_schemas_allowed_for_csv_upload.py
+++ 
b/superset/migrations/versions/2021-08-02_16-39_e323605f370a_fix_schemas_allowed_for_csv_upload.py
@@ -52,7 +52,7 @@ def upgrade():
     Fix databases with ``schemas_allowed_for_csv_upload`` stored as string.
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for database in session.query(Database).all():
         try:
diff --git 
a/superset/migrations/versions/2021-08-03_15-36_143b6f2815da_migrate_pivot_table_v2_heatmaps_to_new_.py
 
b/superset/migrations/versions/2021-08-03_15-36_143b6f2815da_migrate_pivot_table_v2_heatmaps_to_new_.py
index 093eb0c08cc..96da91cb463 100644
--- 
a/superset/migrations/versions/2021-08-03_15-36_143b6f2815da_migrate_pivot_table_v2_heatmaps_to_new_.py
+++ 
b/superset/migrations/versions/2021-08-03_15-36_143b6f2815da_migrate_pivot_table_v2_heatmaps_to_new_.py
@@ -56,7 +56,7 @@ VALID_RENDERERS = (
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = (
         session.query(Slice)
diff --git 
a/superset/migrations/versions/2021-08-04_17-16_f6196627326f_update_chart_permissions.py
 
b/superset/migrations/versions/2021-08-04_17-16_f6196627326f_update_chart_permissions.py
index 9a24138cef8..778dbf70f0c 100644
--- 
a/superset/migrations/versions/2021-08-04_17-16_f6196627326f_update_chart_permissions.py
+++ 
b/superset/migrations/versions/2021-08-04_17-16_f6196627326f_update_chart_permissions.py
@@ -47,7 +47,7 @@ PVM_MAP = {
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the new permissions on the migration itself
     add_pvms(session, NEW_PVMS)
@@ -61,7 +61,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     # Add the old permissions on the migration itself
     add_pvms(session, get_reversed_new_pvms(PVM_MAP))
diff --git 
a/superset/migrations/versions/2021-08-09_17-32_07071313dd52_change_fetch_values_predicate_to_text.py
 
b/superset/migrations/versions/2021-08-09_17-32_07071313dd52_change_fetch_values_predicate_to_text.py
index 5af0d88e185..7216d86baf5 100644
--- 
a/superset/migrations/versions/2021-08-09_17-32_07071313dd52_change_fetch_values_predicate_to_text.py
+++ 
b/superset/migrations/versions/2021-08-09_17-32_07071313dd52_change_fetch_values_predicate_to_text.py
@@ -50,7 +50,7 @@ def upgrade():
 
 def remove_value_if_too_long():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     # it will be easier for users to notice that their field has been deleted 
rather than truncated  # noqa: E501
     # so just remove it if it won't fit back into the 1000 string length column
diff --git 
a/superset/migrations/versions/2021-08-31_11-37_021b81fe4fbb_add_type_to_native_filter_configuration.py
 
b/superset/migrations/versions/2021-08-31_11-37_021b81fe4fbb_add_type_to_native_filter_configuration.py
index 7a28cf45674..c1bedf38d8a 100644
--- 
a/superset/migrations/versions/2021-08-31_11-37_021b81fe4fbb_add_type_to_native_filter_configuration.py
+++ 
b/superset/migrations/versions/2021-08-31_11-37_021b81fe4fbb_add_type_to_native_filter_configuration.py
@@ -49,7 +49,7 @@ class Dashboard(Base):
 def upgrade():
     logger.info("[AddTypeToNativeFilter] Starting upgrade")
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for dashboard in session.query(Dashboard).all():
         logger.info("[AddTypeToNativeFilter] Updating Dashboard<pk:%s> ", 
dashboard.id)
@@ -87,7 +87,7 @@ def upgrade():
 def downgrade():
     logger.info("[RemoveTypeToNativeFilter] Starting downgrade")
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for dashboard in session.query(Dashboard).all():
         logger.info(
diff --git 
a/superset/migrations/versions/2021-09-27_11-31_60dc453f4e2e_migrate_timeseries_limit_metric_to_.py
 
b/superset/migrations/versions/2021-09-27_11-31_60dc453f4e2e_migrate_timeseries_limit_metric_to_.py
index 5d149c7efda..41e2f7f2c01 100644
--- 
a/superset/migrations/versions/2021-09-27_11-31_60dc453f4e2e_migrate_timeseries_limit_metric_to_.py
+++ 
b/superset/migrations/versions/2021-09-27_11-31_60dc453f4e2e_migrate_timeseries_limit_metric_to_.py
@@ -47,7 +47,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     where_clause = and_(
         Slice.viz_type == "pivot_table_v2",
diff --git 
a/superset/migrations/versions/2021-10-12_11-15_32646df09c64_update_time_grain_sqla.py
 
b/superset/migrations/versions/2021-10-12_11-15_32646df09c64_update_time_grain_sqla.py
index e881e64d084..96a6591926d 100644
--- 
a/superset/migrations/versions/2021-10-12_11-15_32646df09c64_update_time_grain_sqla.py
+++ 
b/superset/migrations/versions/2021-10-12_11-15_32646df09c64_update_time_grain_sqla.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def migrate(mapping: dict[str, str]) -> None:
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         try:
diff --git 
a/superset/migrations/versions/2021-11-11_04-18_0ca9e5f1dacd_rename_to_schemas_allowed_for_file_.py
 
b/superset/migrations/versions/2021-11-11_04-18_0ca9e5f1dacd_rename_to_schemas_allowed_for_file_.py
index fff54a88c24..9e8089eb5ce 100644
--- 
a/superset/migrations/versions/2021-11-11_04-18_0ca9e5f1dacd_rename_to_schemas_allowed_for_file_.py
+++ 
b/superset/migrations/versions/2021-11-11_04-18_0ca9e5f1dacd_rename_to_schemas_allowed_for_file_.py
@@ -48,7 +48,7 @@ class Database(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for database in session.query(Database).all():
         try:
@@ -70,7 +70,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for database in session.query(Database).all():
         try:
diff --git 
a/superset/migrations/versions/2021-12-10_19-25_bb38f40aa3ff_add_force_screenshot_to_alerts_reports.py
 
b/superset/migrations/versions/2021-12-10_19-25_bb38f40aa3ff_add_force_screenshot_to_alerts_reports.py
index adea3faf9bc..aeb19051704 100644
--- 
a/superset/migrations/versions/2021-12-10_19-25_bb38f40aa3ff_add_force_screenshot_to_alerts_reports.py
+++ 
b/superset/migrations/versions/2021-12-10_19-25_bb38f40aa3ff_add_force_screenshot_to_alerts_reports.py
@@ -49,7 +49,7 @@ def upgrade():
         batch_op.add_column(sa.Column("force_screenshot", sa.Boolean(), 
default=False))
 
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for report in session.query(ReportSchedule).all():
         # Update existing alerts that send chart screenshots so that the cache 
is
diff --git 
a/superset/migrations/versions/2021-12-13_14-06_fe23025b9441_rename_big_viz_total_form_data_fields.py
 
b/superset/migrations/versions/2021-12-13_14-06_fe23025b9441_rename_big_viz_total_form_data_fields.py
index 26eb3c0d71f..01aa006428b 100644
--- 
a/superset/migrations/versions/2021-12-13_14-06_fe23025b9441_rename_big_viz_total_form_data_fields.py
+++ 
b/superset/migrations/versions/2021-12-13_14-06_fe23025b9441_rename_big_viz_total_form_data_fields.py
@@ -50,7 +50,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type == 
"big_number_total").all()
     for slc in slices:
@@ -77,7 +77,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type == 
"big_number_total").all()
     for slc in slices:
diff --git 
a/superset/migrations/versions/2021-12-17_16-56_31bb738bd1d2_move_pivot_table_v2_legacy_order_by_to_.py
 
b/superset/migrations/versions/2021-12-17_16-56_31bb738bd1d2_move_pivot_table_v2_legacy_order_by_to_.py
index 776441422da..f8a9dea5945 100644
--- 
a/superset/migrations/versions/2021-12-17_16-56_31bb738bd1d2_move_pivot_table_v2_legacy_order_by_to_.py
+++ 
b/superset/migrations/versions/2021-12-17_16-56_31bb738bd1d2_move_pivot_table_v2_legacy_order_by_to_.py
@@ -51,7 +51,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type == 
"pivot_table_v2").all()
     for slc in slices:
@@ -75,7 +75,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type == 
"pivot_table_v2").all()
     for slc in slices:
diff --git 
a/superset/migrations/versions/2022-03-02_09-20_b5a422d8e252_fix_query_and_saved_query_null_schema.py
 
b/superset/migrations/versions/2022-03-02_09-20_b5a422d8e252_fix_query_and_saved_query_null_schema.py
index bfb4e97b04e..8930ba7e673 100644
--- 
a/superset/migrations/versions/2022-03-02_09-20_b5a422d8e252_fix_query_and_saved_query_null_schema.py
+++ 
b/superset/migrations/versions/2022-03-02_09-20_b5a422d8e252_fix_query_and_saved_query_null_schema.py
@@ -51,7 +51,7 @@ class SavedQuery(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for model in (Query, SavedQuery):
         for record in session.query(model).filter(model.schema == "null"):
diff --git 
a/superset/migrations/versions/2022-03-02_16-41_7293b0ca7944_change_adhoc_filter_b_from_none_to_.py
 
b/superset/migrations/versions/2022-03-02_16-41_7293b0ca7944_change_adhoc_filter_b_from_none_to_.py
index e8779e5d83e..2904d49dbc9 100644
--- 
a/superset/migrations/versions/2022-03-02_16-41_7293b0ca7944_change_adhoc_filter_b_from_none_to_.py
+++ 
b/superset/migrations/versions/2022-03-02_16-41_7293b0ca7944_change_adhoc_filter_b_from_none_to_.py
@@ -47,7 +47,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == 
"mixed_timeseries").all():
         try:
@@ -66,7 +66,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == 
"mixed_timeseries").all():
         try:
diff --git 
a/superset/migrations/versions/2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py
 
b/superset/migrations/versions/2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py
index 9fcf32e3248..f93b3acf1cf 100644
--- 
a/superset/migrations/versions/2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py
+++ 
b/superset/migrations/versions/2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py
@@ -893,7 +893,7 @@ def reset_postgres_id_sequence(table: str) -> None:
 
 def upgrade() -> None:
     bind = op.get_bind()
-    session: Session = Session(bind=bind)
+    session: Session = Session(bind=bind, future=True)
     Base.metadata.drop_all(bind=bind, tables=new_tables)
     Base.metadata.create_all(bind=bind, tables=new_tables)
 
diff --git 
a/superset/migrations/versions/2022-04-04_15-04_b0d0249074e4_deprecate_time_range_endpoints_v2.py
 
b/superset/migrations/versions/2022-04-04_15-04_b0d0249074e4_deprecate_time_range_endpoints_v2.py
index bbc92fee108..51f88a999a9 100644
--- 
a/superset/migrations/versions/2022-04-04_15-04_b0d0249074e4_deprecate_time_range_endpoints_v2.py
+++ 
b/superset/migrations/versions/2022-04-04_15-04_b0d0249074e4_deprecate_time_range_endpoints_v2.py
@@ -44,7 +44,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in 
session.query(Slice).filter(Slice.params.like("%time_range_endpoints%")):
         params = json.loads(slc.params)
diff --git 
a/superset/migrations/versions/2022-04-18_11-20_ad07e4fdbaba_rm_time_range_endpoints_from_qc_3.py
 
b/superset/migrations/versions/2022-04-18_11-20_ad07e4fdbaba_rm_time_range_endpoints_from_qc_3.py
index 7671b1b665d..5c50e30157e 100644
--- 
a/superset/migrations/versions/2022-04-18_11-20_ad07e4fdbaba_rm_time_range_endpoints_from_qc_3.py
+++ 
b/superset/migrations/versions/2022-04-18_11-20_ad07e4fdbaba_rm_time_range_endpoints_from_qc_3.py
@@ -63,7 +63,7 @@ def upgrade_slice(slc: Slice):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     slices_updated = 0
     for slc in (
         session.query(Slice)
diff --git 
a/superset/migrations/versions/2022-05-03_19-39_cbe71abde154_fix_report_schedule_and_log.py
 
b/superset/migrations/versions/2022-05-03_19-39_cbe71abde154_fix_report_schedule_and_log.py
index 5fde75de161..abfff3c5776 100644
--- 
a/superset/migrations/versions/2022-05-03_19-39_cbe71abde154_fix_report_schedule_and_log.py
+++ 
b/superset/migrations/versions/2022-05-03_19-39_cbe71abde154_fix_report_schedule_and_log.py
@@ -56,7 +56,7 @@ class ReportSchedule(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for schedule in (
         session.query(ReportSchedule)
diff --git 
a/superset/migrations/versions/2022-05-18_16-07_e786798587de_delete_none_permissions.py
 
b/superset/migrations/versions/2022-05-18_16-07_e786798587de_delete_none_permissions.py
index 6a3d4acbe62..c5f68248e69 100644
--- 
a/superset/migrations/versions/2022-05-18_16-07_e786798587de_delete_none_permissions.py
+++ 
b/superset/migrations/versions/2022-05-18_16-07_e786798587de_delete_none_permissions.py
@@ -98,7 +98,7 @@ class PermissionView(Base):
 def upgrade():
     # ### commands auto generated by Alembic - please adjust! ###
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     pvms = (
         session.query(PermissionView)
diff --git 
a/superset/migrations/versions/2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py
 
b/superset/migrations/versions/2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py
index 1d8389bcc83..035ca511db4 100644
--- 
a/superset/migrations/versions/2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py
+++ 
b/superset/migrations/versions/2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py
@@ -42,7 +42,7 @@ class RowLevelSecurityFilter(Base):
 def upgrade():
     # ### commands auto generated by Alembic - please adjust! ###
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     op.add_column(
         "row_level_security_filters", sa.Column("name", sa.String(length=255))
diff --git 
a/superset/migrations/versions/2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py
 
b/superset/migrations/versions/2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py
index 1608e72afdc..0b90fd74599 100644
--- 
a/superset/migrations/versions/2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py
+++ 
b/superset/migrations/versions/2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py
@@ -49,7 +49,7 @@ class KeyValueEntry(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session: Session = db.Session(bind=bind)
+    session: Session = db.Session(bind=bind, future=True)
     for entry in paginated_update(
         session.query(KeyValueEntry).filter(
             KeyValueEntry.resource == DASHBOARD_PERMALINK_RESOURCE_TYPE
@@ -69,7 +69,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session: Session = db.Session(bind=bind)
+    session: Session = db.Session(bind=bind, future=True)
     for entry in paginated_update(
         session.query(KeyValueEntry).filter(
             KeyValueEntry.resource == DASHBOARD_PERMALINK_RESOURCE_TYPE
diff --git 
a/superset/migrations/versions/2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py
 
b/superset/migrations/versions/2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py
index d5c5d988701..246d5a60153 100644
--- 
a/superset/migrations/versions/2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py
+++ 
b/superset/migrations/versions/2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py
@@ -83,7 +83,7 @@ class SqlaTableUser(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     op.execute(
         insert(DatasetUser).from_select(
diff --git 
a/superset/migrations/versions/2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py
 
b/superset/migrations/versions/2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py
index 66b12da3459..4b4ea772a09 100644
--- 
a/superset/migrations/versions/2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py
+++ 
b/superset/migrations/versions/2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py
@@ -45,11 +45,11 @@ def upgrade():
         op.execute(text("ALTER TABLE slices MODIFY params MEDIUMTEXT"))
         op.execute(text("ALTER TABLE slices MODIFY query_context MEDIUMTEXT"))
 
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateTreeMap.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateTreeMap.downgrade(session)
diff --git 
a/superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py
 
b/superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py
index adeaabac0ca..b3b28e1ee22 100644
--- 
a/superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py
+++ 
b/superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py
@@ -34,11 +34,11 @@ down_revision = "c747c78868b6"
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateAreaChart.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateAreaChart.downgrade(session)
diff --git 
a/superset/migrations/versions/2022-08-16_15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py
 
b/superset/migrations/versions/2022-08-16_15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py
index aa81c46b3a2..d2f1ab68a22 100644
--- 
a/superset/migrations/versions/2022-08-16_15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py
+++ 
b/superset/migrations/versions/2022-08-16_15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py
@@ -45,7 +45,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == "table"):
         params = json.loads(slc.params)
diff --git 
a/superset/migrations/versions/2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py
 
b/superset/migrations/versions/2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py
index 4b390139f73..81a5e83a721 100644
--- 
a/superset/migrations/versions/2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py
+++ 
b/superset/migrations/versions/2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py
@@ -48,7 +48,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     dashboards = (
         session.query(Dashboard)
diff --git 
a/superset/migrations/versions/2023-02-28_14-46_c0a3ea245b61_remove_show_native_filters.py
 
b/superset/migrations/versions/2023-02-28_14-46_c0a3ea245b61_remove_show_native_filters.py
index ad9ff0585c7..ed3e3b0340a 100644
--- 
a/superset/migrations/versions/2023-02-28_14-46_c0a3ea245b61_remove_show_native_filters.py
+++ 
b/superset/migrations/versions/2023-02-28_14-46_c0a3ea245b61_remove_show_native_filters.py
@@ -45,7 +45,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for dashboard in session.query(Dashboard).all():
         try:
diff --git 
a/superset/migrations/versions/2023-03-05_10-06_d0ac08bb5b83_invert_horizontal_bar_chart_order.py
 
b/superset/migrations/versions/2023-03-05_10-06_d0ac08bb5b83_invert_horizontal_bar_chart_order.py
index 949d6775438..f0dd0c77bbd 100644
--- 
a/superset/migrations/versions/2023-03-05_10-06_d0ac08bb5b83_invert_horizontal_bar_chart_order.py
+++ 
b/superset/migrations/versions/2023-03-05_10-06_d0ac08bb5b83_invert_horizontal_bar_chart_order.py
@@ -50,7 +50,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = (
         session.query(Slice)
@@ -88,7 +88,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = (
         session.query(Slice)
diff --git 
a/superset/migrations/versions/2023-03-17_13-24_b5ea9d343307_bar_chart_stack_options.py
 
b/superset/migrations/versions/2023-03-17_13-24_b5ea9d343307_bar_chart_stack_options.py
index 652fc542dc8..bff01696a0e 100644
--- 
a/superset/migrations/versions/2023-03-17_13-24_b5ea9d343307_bar_chart_stack_options.py
+++ 
b/superset/migrations/versions/2023-03-17_13-24_b5ea9d343307_bar_chart_stack_options.py
@@ -49,7 +49,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type.like(CHART_TYPE)).all()
     for slc in slices:
@@ -72,7 +72,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     slices = session.query(Slice).filter(Slice.viz_type.like(CHART_TYPE)).all()
     for slc in slices:
diff --git 
a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
 
b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
index 1790ea512f2..ed7bc1792ab 100644
--- 
a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
+++ 
b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
@@ -83,7 +83,7 @@ def upgrade_slc(slc: Slice) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     with op.batch_alter_table("slices") as batch_op:
         for slc in session.query(Slice).filter(Slice.datasource_type != 
"table").all():
             if slc.datasource_type == "query":
diff --git 
a/superset/migrations/versions/2023-05-01_12-03_9c2a5681ddfd_convert_key_value_entries_to_json.py
 
b/superset/migrations/versions/2023-05-01_12-03_9c2a5681ddfd_convert_key_value_entries_to_json.py
index 58b89cffcea..61466a85963 100644
--- 
a/superset/migrations/versions/2023-05-01_12-03_9c2a5681ddfd_convert_key_value_entries_to_json.py
+++ 
b/superset/migrations/versions/2023-05-01_12-03_9c2a5681ddfd_convert_key_value_entries_to_json.py
@@ -59,7 +59,7 @@ class KeyValueEntry(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session: Session = db.Session(bind=bind)
+    session: Session = db.Session(bind=bind, future=True)
     truncated_count = 0
     for entry in paginated_update(
         session.query(KeyValueEntry).filter(
@@ -85,7 +85,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session: Session = db.Session(bind=bind)
+    session: Session = db.Session(bind=bind, future=True)
     for entry in paginated_update(
         session.query(KeyValueEntry).filter(
             KeyValueEntry.resource.in_(RESOURCES_TO_MIGRATE)
diff --git 
a/superset/migrations/versions/2023-05-11_12-41_4ea966691069_cross_filter_global_scoping.py
 
b/superset/migrations/versions/2023-05-11_12-41_4ea966691069_cross_filter_global_scoping.py
index 1d4322805a7..51972619d28 100644
--- 
a/superset/migrations/versions/2023-05-11_12-41_4ea966691069_cross_filter_global_scoping.py
+++ 
b/superset/migrations/versions/2023-05-11_12-41_4ea966691069_cross_filter_global_scoping.py
@@ -50,7 +50,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     for dashboard in paginated_update(session.query(Dashboard)):
         #
         # This is needed in order to work-around a potential issue
@@ -100,7 +100,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for dashboard in paginated_update(session.query(Dashboard)):
         try:
diff --git 
a/superset/migrations/versions/2023-06-08_09-02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py
 
b/superset/migrations/versions/2023-06-08_09-02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py
index f7c7a63ae68..cffb1ca744f 100644
--- 
a/superset/migrations/versions/2023-06-08_09-02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py
+++ 
b/superset/migrations/versions/2023-06-08_09-02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py
@@ -34,11 +34,11 @@ down_revision = "4ea966691069"
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigratePivotTable.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigratePivotTable.downgrade(session)
diff --git 
a/superset/migrations/versions/2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py
 
b/superset/migrations/versions/2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py
index 5a33ba0c390..9092ba5e15e 100644
--- 
a/superset/migrations/versions/2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py
+++ 
b/superset/migrations/versions/2023-06-08_10-22_4c5da39be729_migrate_treemap_chart.py
@@ -45,11 +45,11 @@ def upgrade():
         op.execute(text("ALTER TABLE slices MODIFY params MEDIUMTEXT"))
         op.execute(text("ALTER TABLE slices MODIFY query_context MEDIUMTEXT"))
 
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateTreeMap.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateTreeMap.downgrade(session)
diff --git 
a/superset/migrations/versions/2023-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py
 
b/superset/migrations/versions/2023-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py
index dc8e068af9c..b529ea906bf 100644
--- 
a/superset/migrations/versions/2023-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py
+++ 
b/superset/migrations/versions/2023-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py
@@ -36,11 +36,11 @@ down_revision = "4c5da39be729"
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateDualLine.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateDualLine.downgrade(session)
diff --git 
a/superset/migrations/versions/2023-07-18_15-30_863adcf72773_delete_obsolete_druid_nosql_slice_parameters.py
 
b/superset/migrations/versions/2023-07-18_15-30_863adcf72773_delete_obsolete_druid_nosql_slice_parameters.py
index 5b9e4272068..e0801d0eca0 100644
--- 
a/superset/migrations/versions/2023-07-18_15-30_863adcf72773_delete_obsolete_druid_nosql_slice_parameters.py
+++ 
b/superset/migrations/versions/2023-07-18_15-30_863adcf72773_delete_obsolete_druid_nosql_slice_parameters.py
@@ -48,7 +48,7 @@ class Slice(Base):
 
 def upgrade():  # noqa: C901
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).all():
         if slc.params:
diff --git 
a/superset/migrations/versions/2023-07-19_16-48_a23c6f8b1280_cleanup_erroneous_parent_filter_ids.py
 
b/superset/migrations/versions/2023-07-19_16-48_a23c6f8b1280_cleanup_erroneous_parent_filter_ids.py
index 746bd7513be..c06093a92f1 100644
--- 
a/superset/migrations/versions/2023-07-19_16-48_a23c6f8b1280_cleanup_erroneous_parent_filter_ids.py
+++ 
b/superset/migrations/versions/2023-07-19_16-48_a23c6f8b1280_cleanup_erroneous_parent_filter_ids.py
@@ -48,7 +48,7 @@ class Dashboard(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for dashboard in session.query(Dashboard).all():
         if dashboard.json_metadata:
diff --git 
a/superset/migrations/versions/2023-07-19_17-54_ee179a490af9_deckgl_path_width_units.py
 
b/superset/migrations/versions/2023-07-19_17-54_ee179a490af9_deckgl_path_width_units.py
index 744b401bd23..16562421e53 100644
--- 
a/superset/migrations/versions/2023-07-19_17-54_ee179a490af9_deckgl_path_width_units.py
+++ 
b/superset/migrations/versions/2023-07-19_17-54_ee179a490af9_deckgl_path_width_units.py
@@ -48,7 +48,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     for slc in session.query(Slice).filter(
         or_(
             Slice.viz_type == "deck_path",
diff --git 
a/superset/migrations/versions/2023-08-02_15-23_0769ef90fddd_fix_schema_perm_for_datasets.py
 
b/superset/migrations/versions/2023-08-02_15-23_0769ef90fddd_fix_schema_perm_for_datasets.py
index fefc8f3b11d..80da4e3ddad 100644
--- 
a/superset/migrations/versions/2023-08-02_15-23_0769ef90fddd_fix_schema_perm_for_datasets.py
+++ 
b/superset/migrations/versions/2023-08-02_15-23_0769ef90fddd_fix_schema_perm_for_datasets.py
@@ -93,7 +93,7 @@ def fix_charts_schema_perm(session):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     if isinstance(bind.dialect, SQLiteDialect):
         return  # sqlite doesn't have a concat function
 
diff --git 
a/superset/migrations/versions/2023-08-14_09-38_9f4a086c2676_add_normalize_columns_to_sqla_model.py
 
b/superset/migrations/versions/2023-08-14_09-38_9f4a086c2676_add_normalize_columns_to_sqla_model.py
index 3d23c4f0ddf..89b7ba481ac 100644
--- 
a/superset/migrations/versions/2023-08-14_09-38_9f4a086c2676_add_normalize_columns_to_sqla_model.py
+++ 
b/superset/migrations/versions/2023-08-14_09-38_9f4a086c2676_add_normalize_columns_to_sqla_model.py
@@ -56,7 +56,7 @@ def upgrade():
     )
 
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for table in paginated_update(session.query(SqlaTable)):
         table.normalize_columns = True
diff --git 
a/superset/migrations/versions/2023-09-06_13-18_317970b4400c_added_time_secondary_column_to_.py
 
b/superset/migrations/versions/2023-09-06_13-18_317970b4400c_added_time_secondary_column_to_.py
index 29fac917bf0..2ec9e5b88ba 100755
--- 
a/superset/migrations/versions/2023-09-06_13-18_317970b4400c_added_time_secondary_column_to_.py
+++ 
b/superset/migrations/versions/2023-09-06_13-18_317970b4400c_added_time_secondary_column_to_.py
@@ -60,7 +60,7 @@ def upgrade():
         )
 
         bind = op.get_bind()
-        session = db.Session(bind=bind)
+        session = db.Session(bind=bind, future=True)
 
         for table in paginated_update(session.query(SqlaTable)):
             table.always_filter_main_dttm = False
diff --git 
a/superset/migrations/versions/2023-12-15_17-58_06dd9ff00fe8_add_percent_calculation_type_funnel_.py
 
b/superset/migrations/versions/2023-12-15_17-58_06dd9ff00fe8_add_percent_calculation_type_funnel_.py
index b2a4f14c8b6..266dc7ea858 100644
--- 
a/superset/migrations/versions/2023-12-15_17-58_06dd9ff00fe8_add_percent_calculation_type_funnel_.py
+++ 
b/superset/migrations/versions/2023-12-15_17-58_06dd9ff00fe8_add_percent_calculation_type_funnel_.py
@@ -46,7 +46,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type == "funnel")
@@ -61,7 +61,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type == "funnel")
diff --git 
a/superset/migrations/versions/2024-01-18_14-41_a32e0c4d8646_migrate_sunburst_chart.py
 
b/superset/migrations/versions/2024-01-18_14-41_a32e0c4d8646_migrate_sunburst_chart.py
index 1ed8d466212..46badaa34f5 100644
--- 
a/superset/migrations/versions/2024-01-18_14-41_a32e0c4d8646_migrate_sunburst_chart.py
+++ 
b/superset/migrations/versions/2024-01-18_14-41_a32e0c4d8646_migrate_sunburst_chart.py
@@ -34,11 +34,11 @@ from superset.migrations.shared.migrate_viz import 
MigrateSunburst  # noqa: E402
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateSunburst.upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateSunburst.downgrade(session)
diff --git 
a/superset/migrations/versions/2024-01-18_15-20_214f580d09c9_migrate_filter_boxes_to_native_filters.py
 
b/superset/migrations/versions/2024-01-18_15-20_214f580d09c9_migrate_filter_boxes_to_native_filters.py
index 0f72209d55e..ecefe6862fc 100644
--- 
a/superset/migrations/versions/2024-01-18_15-20_214f580d09c9_migrate_filter_boxes_to_native_filters.py
+++ 
b/superset/migrations/versions/2024-01-18_15-20_214f580d09c9_migrate_filter_boxes_to_native_filters.py
@@ -71,7 +71,7 @@ class Slice(Base):  # type: ignore # pylint: 
disable=too-few-public-methods
 
 
 def upgrade():
-    session = db.Session(bind=op.get_bind())
+    session = db.Session(bind=op.get_bind(), future=True)
 
     for dashboard in paginated_update(session.query(Dashboard)):
         migrate_dashboard(dashboard)
diff --git 
a/superset/migrations/versions/2024-02-07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py
 
b/superset/migrations/versions/2024-02-07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py
index 1fc4158357d..0d014bb77b5 100644
--- 
a/superset/migrations/versions/2024-02-07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py
+++ 
b/superset/migrations/versions/2024-02-07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py
@@ -60,7 +60,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_upgrade(session)
 
@@ -73,7 +73,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_downgrade(session)
 
diff --git 
a/superset/migrations/versions/2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py
 
b/superset/migrations/versions/2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py
index 8ba0d2c67a0..51cf6b1c544 100644
--- 
a/superset/migrations/versions/2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py
+++ 
b/superset/migrations/versions/2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py
@@ -48,7 +48,7 @@ class Slice(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type == "pop_kpi")
@@ -71,7 +71,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type == "pop_kpi")
diff --git 
a/superset/migrations/versions/2024-04-08_15-43_5ad7321c2169_mig_new_csv_upload_perm.py
 
b/superset/migrations/versions/2024-04-08_15-43_5ad7321c2169_mig_new_csv_upload_perm.py
index e5c0121a1d0..966721022bb 100644
--- 
a/superset/migrations/versions/2024-04-08_15-43_5ad7321c2169_mig_new_csv_upload_perm.py
+++ 
b/superset/migrations/versions/2024-04-08_15-43_5ad7321c2169_mig_new_csv_upload_perm.py
@@ -60,7 +60,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_upgrade(session)
 
@@ -73,7 +73,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_downgrade(session)
 
diff --git 
a/superset/migrations/versions/2024-04-17_14-04_d60591c5515f_mig_new_excel_upload_perm.py
 
b/superset/migrations/versions/2024-04-17_14-04_d60591c5515f_mig_new_excel_upload_perm.py
index 69465d1b897..76c1ccd71f5 100644
--- 
a/superset/migrations/versions/2024-04-17_14-04_d60591c5515f_mig_new_excel_upload_perm.py
+++ 
b/superset/migrations/versions/2024-04-17_14-04_d60591c5515f_mig_new_excel_upload_perm.py
@@ -62,7 +62,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_upgrade(session)
 
@@ -75,7 +75,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_downgrade(session)
 
diff --git 
a/superset/migrations/versions/2024-04-26_12-36_4a33124c18ad_mig_new_columnar_upload_perm.py
 
b/superset/migrations/versions/2024-04-26_12-36_4a33124c18ad_mig_new_columnar_upload_perm.py
index 57c129db33f..3931c9f39a3 100644
--- 
a/superset/migrations/versions/2024-04-26_12-36_4a33124c18ad_mig_new_columnar_upload_perm.py
+++ 
b/superset/migrations/versions/2024-04-26_12-36_4a33124c18ad_mig_new_columnar_upload_perm.py
@@ -63,7 +63,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_upgrade(session)
 
@@ -76,7 +76,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_downgrade(session)
 
diff --git 
a/superset/migrations/versions/2024-05-10_18-02_f84fde59123a_update_charts_with_old_time_comparison.py
 
b/superset/migrations/versions/2024-05-10_18-02_f84fde59123a_update_charts_with_old_time_comparison.py
index 10d8d82282d..dd5e1681e77 100644
--- 
a/superset/migrations/versions/2024-05-10_18-02_f84fde59123a_update_charts_with_old_time_comparison.py
+++ 
b/superset/migrations/versions/2024-05-10_18-02_f84fde59123a_update_charts_with_old_time_comparison.py
@@ -97,7 +97,7 @@ def upgrade_comparison_params(slice_params: dict[str, Any]) 
-> dict[str, Any]:
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(
@@ -198,7 +198,7 @@ def downgrade_comparison_params(slice_params: dict[str, 
Any]) -> dict[str, Any]:
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(
diff --git 
a/superset/migrations/versions/2025-01-08_09-34_d482d51c15ca_remove_legacy_plugins_5_0.py
 
b/superset/migrations/versions/2025-01-08_09-34_d482d51c15ca_remove_legacy_plugins_5_0.py
index 22b174cf3dc..bfb7f10700e 100644
--- 
a/superset/migrations/versions/2025-01-08_09-34_d482d51c15ca_remove_legacy_plugins_5_0.py
+++ 
b/superset/migrations/versions/2025-01-08_09-34_d482d51c15ca_remove_legacy_plugins_5_0.py
@@ -42,7 +42,7 @@ down_revision = "eb1c288c71c4"
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     try:
         MigrateAreaChart.upgrade(session)
         MigrateBarChart.upgrade(session)
@@ -61,7 +61,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     try:
         MigrateAreaChart.downgrade(session)
         MigrateBarChart.downgrade(session)
diff --git 
a/superset/migrations/versions/2025-01-22_14-34_74ad1125881c_converge_upload_permissions.py
 
b/superset/migrations/versions/2025-01-22_14-34_74ad1125881c_converge_upload_permissions.py
index 75a5e0ad979..1dadc9fd850 100644
--- 
a/superset/migrations/versions/2025-01-22_14-34_74ad1125881c_converge_upload_permissions.py
+++ 
b/superset/migrations/versions/2025-01-22_14-34_74ad1125881c_converge_upload_permissions.py
@@ -59,7 +59,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_upgrade(session)
 
@@ -72,7 +72,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
 
     do_downgrade(session)
 
diff --git 
a/superset/migrations/versions/2025-04-13_22-10_378cecfdba9f_merge_x_axis_sort_series_with_x_axis_.py
 
b/superset/migrations/versions/2025-04-13_22-10_378cecfdba9f_merge_x_axis_sort_series_with_x_axis_.py
index 1bda3175cdb..464aa0e29ea 100644
--- 
a/superset/migrations/versions/2025-04-13_22-10_378cecfdba9f_merge_x_axis_sort_series_with_x_axis_.py
+++ 
b/superset/migrations/versions/2025-04-13_22-10_378cecfdba9f_merge_x_axis_sort_series_with_x_axis_.py
@@ -58,7 +58,7 @@ timeseries_charts = [
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type.in_(timeseries_charts))
     ):
@@ -87,7 +87,7 @@ def upgrade():
 
 def downgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(Slice.viz_type.in_(timeseries_charts))
diff --git 
a/superset/migrations/versions/2025-06-06_00-39_363a9b1e8992_convert_metric_currencies_from_str_to_json.py
 
b/superset/migrations/versions/2025-06-06_00-39_363a9b1e8992_convert_metric_currencies_from_str_to_json.py
index d4dce03c2b3..81ba05dbe57 100644
--- 
a/superset/migrations/versions/2025-06-06_00-39_363a9b1e8992_convert_metric_currencies_from_str_to_json.py
+++ 
b/superset/migrations/versions/2025-06-06_00-39_363a9b1e8992_convert_metric_currencies_from_str_to_json.py
@@ -51,7 +51,7 @@ class SqlMetric(Base):
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     currency_configs = 
session.query(SqlMetric).filter(SqlMetric.currency.isnot(None))
     for metric in paginated_update(
         currency_configs,
diff --git 
a/superset/migrations/versions/2025-12-16_12-00_f5b5f88d8526_fix_form_data_string_in_query_context.py
 
b/superset/migrations/versions/2025-12-16_12-00_f5b5f88d8526_fix_form_data_string_in_query_context.py
index dfa3e7e85e2..2b16f370fbb 100644
--- 
a/superset/migrations/versions/2025-12-16_12-00_f5b5f88d8526_fix_form_data_string_in_query_context.py
+++ 
b/superset/migrations/versions/2025-12-16_12-00_f5b5f88d8526_fix_form_data_string_in_query_context.py
@@ -71,7 +71,7 @@ def upgrade():
     instead of a dict during chart import migration.
     """
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in paginated_update(
         session.query(Slice).filter(
diff --git 
a/superset/migrations/versions/2026-03-02_00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py
 
b/superset/migrations/versions/2026-03-02_00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py
index 0ee521d4b8b..d78602acaf4 100644
--- 
a/superset/migrations/versions/2026-03-02_00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py
+++ 
b/superset/migrations/versions/2026-03-02_00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py
@@ -206,13 +206,13 @@ def _migrate_deckgl_slices(session: Session, *, upgrade: 
bool) -> None:
 
 def upgrade() -> None:
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateMapBox.upgrade(session)
     _migrate_deckgl_slices(session, upgrade=True)
 
 
 def downgrade() -> None:
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
     MigrateMapBox.downgrade(session)
     _migrate_deckgl_slices(session, upgrade=False)
diff --git 
a/superset/migrations/versions/2026-03-02_12-00_a1b2c3d4e5f6_add_granular_export_permissions.py
 
b/superset/migrations/versions/2026-03-02_12-00_a1b2c3d4e5f6_add_granular_export_permissions.py
index 37c207c99ee..bf5aa790f78 100644
--- 
a/superset/migrations/versions/2026-03-02_12-00_a1b2c3d4e5f6_add_granular_export_permissions.py
+++ 
b/superset/migrations/versions/2026-03-02_12-00_a1b2c3d4e5f6_add_granular_export_permissions.py
@@ -66,11 +66,11 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
     do_upgrade(session)
 
 
 def downgrade():
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
     do_downgrade(session)
diff --git 
a/superset/migrations/versions/2026-05-29_00-00_b4a3f2e1d0c9_fix_security_view_menu_case.py
 
b/superset/migrations/versions/2026-05-29_00-00_b4a3f2e1d0c9_fix_security_view_menu_case.py
index 3502e691765..9c728288607 100644
--- 
a/superset/migrations/versions/2026-05-29_00-00_b4a3f2e1d0c9_fix_security_view_menu_case.py
+++ 
b/superset/migrations/versions/2026-05-29_00-00_b4a3f2e1d0c9_fix_security_view_menu_case.py
@@ -115,7 +115,7 @@ def do_upgrade(session: Session) -> None:
 
 def upgrade() -> None:
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
     do_upgrade(session)
 
 
diff --git 
a/superset/migrations/versions/2026-06-23_03-23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py
 
b/superset/migrations/versions/2026-06-23_03-23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py
index b493593f8cd..6ab62c611cf 100644
--- 
a/superset/migrations/versions/2026-06-23_03-23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py
+++ 
b/superset/migrations/versions/2026-06-23_03-23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py
@@ -98,7 +98,7 @@ def do_downgrade(session: Session) -> None:
 
 def upgrade() -> None:
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
     do_upgrade(session)
     try:
         session.commit()
@@ -109,7 +109,7 @@ def upgrade() -> None:
 
 def downgrade() -> None:
     bind = op.get_bind()
-    session = Session(bind=bind)
+    session = Session(bind=bind, future=True)
     do_downgrade(session)
     try:
         session.commit()
diff --git 
a/superset/migrations/versions/2026-06-30_00-00_d24e6b0a9c7f_strip_metricsqlexpressions_from_ag_grid_params.py
 
b/superset/migrations/versions/2026-06-30_00-00_d24e6b0a9c7f_strip_metricsqlexpressions_from_ag_grid_params.py
index 4e408132af1..25428b14164 100644
--- 
a/superset/migrations/versions/2026-06-30_00-00_d24e6b0a9c7f_strip_metricsqlexpressions_from_ag_grid_params.py
+++ 
b/superset/migrations/versions/2026-06-30_00-00_d24e6b0a9c7f_strip_metricsqlexpressions_from_ag_grid_params.py
@@ -95,7 +95,7 @@ def _strip_query_context(slc: Slice) -> bool:
 
 def upgrade() -> None:
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.Session(bind=bind, future=True)
 
     for slc in session.query(Slice).filter(Slice.viz_type == _VIZ_TYPE):
         _strip_params(slc)
diff --git a/superset/tags/models.py b/superset/tags/models.py
index c60e660b23d..39231b3e5a3 100644
--- a/superset/tags/models.py
+++ b/superset/tags/models.py
@@ -49,7 +49,7 @@ if TYPE_CHECKING:
     from superset.models.slice import Slice
     from superset.models.sql_lab import Query
 
-Session = sessionmaker()
+Session = sessionmaker(future=True)
 
 user_favorite_tag_table = Table(
     "user_favorite_tag",
diff --git a/tests/integration_tests/dao/conftest.py 
b/tests/integration_tests/dao/conftest.py
index 583ef9b5c51..f34f9ea8426 100644
--- a/tests/integration_tests/dao/conftest.py
+++ b/tests/integration_tests/dao/conftest.py
@@ -84,7 +84,7 @@ def app_context(app: Flask) -> Generator[Session, None, None]:
     )
 
     # Create session bound to in-memory database
-    session_factory = sessionmaker(bind=engine)
+    session_factory = sessionmaker(bind=engine, future=True)
     session = session_factory()
 
     # Make session compatible with Flask-SQLAlchemy expectations
diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py
index 7e9bea15486..eee1ed15d9c 100644
--- a/tests/unit_tests/conftest.py
+++ b/tests/unit_tests/conftest.py
@@ -46,7 +46,7 @@ def get_session(mocker: MockerFixture) -> Callable[[], 
Session]:
     engine = create_engine("sqlite://", future=True)
 
     def get_session():
-        Session_ = sessionmaker(bind=engine)  # pylint: disable=invalid-name  
# noqa: N806
+        Session_ = sessionmaker(bind=engine, future=True)  # pylint: 
disable=invalid-name  # noqa: N806
         in_memory_session = Session_()
 
         # flask calls db.session.remove()
diff --git a/tests/unit_tests/databases/filters_test.py 
b/tests/unit_tests/databases/filters_test.py
index fbfdf830341..022dc04f979 100644
--- a/tests/unit_tests/databases/filters_test.py
+++ b/tests/unit_tests/databases/filters_test.py
@@ -64,7 +64,7 @@ def test_database_filter_full_db_access(mocker: 
MockerFixture) -> None:
     mocker.patch.object(security_manager, "can_access_all_databases", 
return_value=True)
 
     engine = create_engine("sqlite://", future=True)
-    Session = sessionmaker(bind=engine)  # noqa: N806
+    Session = sessionmaker(bind=engine, future=True)  # noqa: N806
     session = Session()
     query = session.query(Database)
 
diff --git a/tests/unit_tests/distributed_lock/distributed_lock_tests.py 
b/tests/unit_tests/distributed_lock/distributed_lock_tests.py
index 3b22c3adc43..4f9c7d9a0f3 100644
--- a/tests/unit_tests/distributed_lock/distributed_lock_tests.py
+++ b/tests/unit_tests/distributed_lock/distributed_lock_tests.py
@@ -56,7 +56,7 @@ def _get_other_session() -> Session:
     from superset import db
 
     bind = db.session.get_bind()
-    SessionMaker = sessionmaker(bind=bind)  # noqa: N806
+    SessionMaker = sessionmaker(bind=bind, future=True)  # noqa: N806
     return SessionMaker()
 
 
diff --git 
a/tests/unit_tests/migrations/test_strip_metricsqlexpressions_from_ag_grid_params.py
 
b/tests/unit_tests/migrations/test_strip_metricsqlexpressions_from_ag_grid_params.py
index 0b73256166f..3834f548a6a 100644
--- 
a/tests/unit_tests/migrations/test_strip_metricsqlexpressions_from_ag_grid_params.py
+++ 
b/tests/unit_tests/migrations/test_strip_metricsqlexpressions_from_ag_grid_params.py
@@ -146,7 +146,7 @@ def test_strip_query_context_noop_on_invalid_json() -> None:
 def test_upgrade_strips_both_fields(engine) -> None:
     """upgrade() must strip _FIELD from params and query_context for 
ag_grid_table
     slices, and must not touch slices of other viz types."""
-    with Session(engine) as seed:
+    with Session(engine, future=True) as seed:
         seed.add_all(
             [
                 Slice(
@@ -172,7 +172,7 @@ def test_upgrade_strips_both_fields(engine) -> None:
     # UPDATEs before the connection is committed; without it the outer commit
     # has nothing to write and the data is left unchanged.
     with engine.begin() as conn:
-        upgrade_session = Session(bind=conn)
+        upgrade_session = Session(bind=conn, future=True)
         with (
             patch.object(migration, "op") as mock_op,
             patch.object(migration, "db") as mock_db,
@@ -181,7 +181,7 @@ def test_upgrade_strips_both_fields(engine) -> None:
             mock_db.Session.return_value = upgrade_session
             migration.upgrade()
 
-    with Session(engine) as verify:
+    with Session(engine, future=True) as verify:
         slc1 = verify.get(Slice, 1)
         params1 = json.loads(slc1.params)
         assert _FIELD not in params1["extra_form_data"], (
diff --git a/tests/unit_tests/security/exclude_users_filter_test.py 
b/tests/unit_tests/security/exclude_users_filter_test.py
index b68a867788f..5091467c616 100644
--- a/tests/unit_tests/security/exclude_users_filter_test.py
+++ b/tests/unit_tests/security/exclude_users_filter_test.py
@@ -45,7 +45,7 @@ def test_exclude_users_filter_no_exclusions(mocker: 
MockerFixture) -> None:
     )
 
     engine = create_engine("sqlite://", future=True)
-    Session = sessionmaker(bind=engine)  # noqa: N806
+    Session = sessionmaker(bind=engine, future=True)  # noqa: N806
     session = Session()
     query = session.query(User)
 
@@ -70,7 +70,7 @@ def test_exclude_users_filter_with_config(mocker: 
MockerFixture) -> None:
     )
 
     engine = create_engine("sqlite://")
-    Session = sessionmaker(bind=engine)  # noqa: N806
+    Session = sessionmaker(bind=engine, future=True)  # noqa: N806
     session = Session()
     query = session.query(User)
 
@@ -106,7 +106,7 @@ def test_exclude_users_filter_with_security_manager(mocker: 
MockerFixture) -> No
     )
 
     engine = create_engine("sqlite://")
-    Session = sessionmaker(bind=engine)  # noqa: N806
+    Session = sessionmaker(bind=engine, future=True)  # noqa: N806
     session = Session()
     query = session.query(User)
 
@@ -144,7 +144,7 @@ def 
test_exclude_users_filter_config_takes_precedence(mocker: MockerFixture) ->
     )
 
     engine = create_engine("sqlite://")
-    Session = sessionmaker(bind=engine)  # noqa: N806
+    Session = sessionmaker(bind=engine, future=True)  # noqa: N806
     session = Session()
     query = session.query(User)
 
diff --git a/tests/unit_tests/versioning/test_listener.py 
b/tests/unit_tests/versioning/test_listener.py
index f78a88d79b1..922a4011be1 100644
--- a/tests/unit_tests/versioning/test_listener.py
+++ b/tests/unit_tests/versioning/test_listener.py
@@ -43,7 +43,7 @@ def lifecycle_session() -> Iterator[Session]:
     """Yield an isolated SQLAlchemy session backed by in-memory SQLite."""
     engine = sa.create_engine("sqlite://", future=True)
     Base.metadata.create_all(engine)
-    session = sessionmaker(bind=engine)()
+    session = sessionmaker(bind=engine, future=True)()
     try:
         yield session
     finally:
diff --git a/tests/unit_tests/views/test_soft_delete_filter.py 
b/tests/unit_tests/views/test_soft_delete_filter.py
index b3f1165e4b6..47863e269ed 100644
--- a/tests/unit_tests/views/test_soft_delete_filter.py
+++ b/tests/unit_tests/views/test_soft_delete_filter.py
@@ -70,7 +70,7 @@ def query_with_session() -> MagicMock:
     """A MagicMock that quacks like a SQLAlchemy Query with a real
     Session whose ``info`` dict the filter can mutate."""
     q = MagicMock()
-    real_session = Session()
+    real_session = Session(future=True)
     q.session = real_session
     return q
 

Reply via email to