@@ -917,33 +917,44 @@ def get_db_url(
917
917
)
918
918
919
919
def _create_database_and_update_engine (self , db : Text , engine_url : "URL" ):
920
- """Create databse `db` and update engine to reflect the updated `engine_url`."""
921
-
920
+ """Creates database `db` and updates engine accordingly."""
922
921
from sqlalchemy import create_engine
923
922
923
+ if not self .engine .dialect .name == "postgresql" :
924
+ rasa .shared .utils .io .raise_warning (
925
+ "The parameter 'login_db' can only be used with a postgres database." ,
926
+ )
927
+ return
928
+
924
929
self ._create_database (self .engine , db )
925
930
engine_url .database = db
926
931
self .engine = create_engine (engine_url )
927
932
928
933
@staticmethod
929
- def _create_database (engine : "Engine" , db : Text ):
934
+ def _create_database (engine : "Engine" , database_name : Text ) -> None :
930
935
"""Create database `db` on `engine` if it does not exist."""
931
-
932
936
import psycopg2
933
937
934
938
conn = engine .connect ()
935
939
936
- cursor = conn .connection .cursor ()
937
- cursor .execute ("COMMIT" )
938
- cursor .execute ("SELECT 1 FROM pg_catalog.pg_database WHERE datname = ?" , (db ,))
939
- exists = cursor .fetchone ()
940
- if not exists :
940
+ matching_rows = (
941
+ conn .execution_options (isolation_level = "AUTOCOMMIT" )
942
+ .execute (
943
+ sa .text (
944
+ "SELECT 1 FROM pg_catalog.pg_database "
945
+ "WHERE datname = :database_name"
946
+ ),
947
+ database_name = database_name ,
948
+ )
949
+ .rowcount
950
+ )
951
+
952
+ if not matching_rows :
941
953
try :
942
- cursor .execute (f"CREATE DATABASE { db } " )
954
+ conn .execute (f"CREATE DATABASE { database_name } " )
943
955
except psycopg2 .IntegrityError as e :
944
- logger .error (f"Could not create database '{ db } ': { e } " )
956
+ logger .error (f"Could not create database '{ database_name } ': { e } " )
945
957
946
- cursor .close ()
947
958
conn .close ()
948
959
949
960
@contextlib .contextmanager
0 commit comments