diff --git a/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDatabasePicker/DataSelectorDatabasePicker.tsx b/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDatabasePicker/DataSelectorDatabasePicker.tsx
index 7280d7109f0ea6ab160a3924b0fbe28d4b15f4e4..b65b5974e08eecc24bc286ddf995b878b5edf413 100644
--- a/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDatabasePicker/DataSelectorDatabasePicker.tsx
+++ b/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDatabasePicker/DataSelectorDatabasePicker.tsx
@@ -1,4 +1,4 @@
-import React from "react";
+import React, { useCallback, useMemo } from "react";
 
 import Icon from "metabase/components/Icon";
 import AccordionList from "metabase/core/components/AccordionList";
@@ -27,14 +27,15 @@ type DataSelectorDatabasePickerProps = {
 };
 
 type Item = {
-  database: Database;
-  index: number;
   name: string;
+  index: number;
+  database: Database;
   writebackEnabled?: boolean;
 };
 
 type Section = {
-  items: Item[];
+  name?: JSX.Element;
+  items?: Item[];
 };
 
 const DataSelectorDatabasePicker = ({
@@ -46,31 +47,41 @@ const DataSelectorDatabasePicker = ({
   hasInitialFocus,
   requireWriteback = false,
 }: DataSelectorDatabasePickerProps) => {
-  if (databases.length === 0) {
-    return <DataSelectorLoading />;
-  }
+  const sections = useMemo(() => {
+    const sections: Section[] = [];
+
+    if (onBack) {
+      sections.push({ name: <RawDataBackButton /> });
+    }
 
-  const sections: Section[] = [
-    {
-      items: databases.map((database: Database, index: number) => ({
+    const databaseItems = databases
+      .filter(database =>
+        requireWriteback ? checkDatabaseActionsEnabled(database) : true,
+      )
+      .map((database, index) => ({
         name: database.name,
         index,
-        database: database,
-      })),
-    },
-  ];
+        database,
+      }));
 
-  const handleChangeSection = (_section: Section, sectionIndex: number) => {
-    const isNavigationSection = onBack && sectionIndex === 0;
+    sections.push({ items: databaseItems });
 
-    if (isNavigationSection) {
-      onBack();
-    }
-    return false;
-  };
+    return sections;
+  }, [databases, requireWriteback, onBack]);
 
-  if (onBack) {
-    sections.unshift({ name: <RawDataBackButton /> } as any);
+  const handleChangeSection = useCallback(
+    (section: Section, sectionIndex: number) => {
+      const isNavigationSection = onBack && sectionIndex === 0;
+      if (isNavigationSection) {
+        onBack();
+      }
+      return false;
+    },
+    [onBack],
+  );
+
+  if (databases.length === 0) {
+    return <DataSelectorLoading />;
   }
 
   return (
@@ -82,11 +93,6 @@ const DataSelectorDatabasePicker = ({
       sections={sections}
       onChange={(item: Item) => onChangeDatabase(item.database)}
       onChangeSection={handleChangeSection}
-      itemIsClickable={
-        requireWriteback
-          ? (item: Item) => checkDatabaseActionsEnabled(item.database)
-          : undefined
-      }
       itemIsSelected={(item: Item) =>
         selectedDatabase && item.database.id === selectedDatabase.id
       }
diff --git a/frontend/test/metabase/scenarios/models/model-actions.cy.spec.js b/frontend/test/metabase/scenarios/models/model-actions.cy.spec.js
index 6191fd8aaa44399280bc2eced5ccad53c021315e..6a47754f6509f9a3bb4900efec0fc74044be332e 100644
--- a/frontend/test/metabase/scenarios/models/model-actions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/models/model-actions.cy.spec.js
@@ -154,7 +154,10 @@ describe(
       popover().findByText("Action").click();
 
       cy.findByText("Select a database").click();
-      popover().findByText("QA Postgres12").click();
+      popover().within(() => {
+        cy.findByText("Sample Database").should("not.exist");
+        cy.findByText("QA Postgres12").click();
+      });
 
       fillActionQuery(QUERY);
       cy.findByRole("button", { name: "Save" }).click();