Skip to content

Variable 'dsn' needs to be initialized in create_database(). Otherwise 'UnboundLocalError: cannot access local variable' possible if 'database' arg. points to an ALIAS #56

@pavel-zotov

Description

@pavel-zotov

Please consider func create_database().

There is following code starting from line 2400:

    db_config: DatabaseConfig = driver_config.get_database(database)
    if db_config is None:
        db_config = driver_config.db_defaults
        srv_config = driver_config.server_defaults
        if _is_dsn(database):
            dsn = database
            database = None
            srv_config.host.clear()
    else:
         . . .

If control falls into the branch "if db_config is None" and then into "if _is_dsn(database)" -- all fine.
But if _is_dsn(database) returns False then we have a problem: dsn remains undefined until following call at line 2435:

    dsn = _connect_helper(dsn, srv_config.host.value, srv_config.port.value,
                          database, db_config.protocol.value)

This code will raise "UnboundLocalError: cannot access local variable 'dsn' where it is not associated with a value"

Function _is_dsn() may return False if value of database argument represents an ALIAS rather than file (e.g. db_main_alias used in replication tests or similar strings).

This is what i propose:

Comparing files core.py and core-upd.py
***** core.py
 2401:      if db_config is None:
 2402:          db_config = driver_config.db_defaults
***** core-upd.py
 2402:      # pzotov, 11.09.2025: we have to initialize here 'dsn' variable otherwise we get error
 2403:      # UnboundLocalError: cannot access local variable 'dsn' where it is not associated with a value
 2404:      # if the 'database' argument is an ALIAS, e.g. 'db_main_alias' etc!
 2405:      dsn: str | None = None
 2407:      if db_config is None:
 2408:          db_config = driver_config.db_defaults
*****

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions