[Python] VS Code Python SQL Alchemy alembic fails and wont output print, debug or logs

Discussão em 'Python' iniciado por Stack, Fevereiro 9, 2025.

  1. Stack

    Stack Membro Participativo

    I'm running VS Code Python 3.12.8 in an Azure Function using Flash and venev. I installed SQLAlchemy to get my postgres SQL going, and I cannot get Alembic to do the first migration.

    It errors and will not leave a trace, print or debug line. I only get a stack trace in terminal or out putted in a file log.

    I can run this code just fine.. SO I know access, accounts and passwords are correct

    from sqlalchemy import create_engine, text

    DATABASE_URL = "postgresql://************************/postgres?sslmode=require"

    engine = create_engine(DATABASE_URL, pool_pre_ping=True, echo=True)

    try:
    with engine.connect() as connection:
    result = connection.execute(text("SELECT version();")) # ✅ Use `text()`
    print("✅ Connected! PostgreSQL Version:", result.fetchone()[0])
    except Exception as e:
    print("❌ SQLAlchemy Connection Failed:", e)


    In case it matters, here is my code layout [​IMG]

    alembic.ini

    # A generic, single-database configuration.

    [alembic]
    script_location = alembic
    sqlalchemy.url = postgresql://%(PGUSER)s:%(PGPASSWORD)s@%(PGHOST)s:%(PGPORT)s/%(PGDATABASE)s?sslmode=require

    # Logging settings
    output_encoding = utf-8

    [loggers]
    keys = root, sqlalchemy, alembic

    [handlers]
    keys = console, file

    [formatters]
    keys = generic

    [logger_root]
    level = DEBUG
    handlers = console, file

    [logger_sqlalchemy]
    level=DEBUG
    handlers=console
    qualname=sqlalchemy.engine
    propagate=0

    [logger_alembic]
    level=DEBUG
    handlers=console,file
    qualname=alembic
    propagate=0

    [handler_console]
    class=StreamHandler
    args=(sys.stdout,)
    level=DEBUG
    formatter=generic

    [handler_file]
    class=FileHandler
    args=('alembic_debug.log', 'w')
    level=DEBUG
    formatter=generic

    [formatter_generic]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s


    env.py

    import sys
    import os
    sys.path.insert(0, os.getcwd())
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))

    from logging.config import fileConfig
    from sqlalchemy import engine_from_config
    from sqlalchemy import pool
    from sqlalchemy import create_engine
    from alembic import context
    from models import Base

    import psycopg2


    # --- FIX IMPORT PATH ISSUES ---
    sys.path.insert(0, os.getcwd()) # Add current working directory
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) # Add project root

    import os
    import sys
    import logging
    from sqlalchemy import create_engine
    from alembic import context

    import os
    import logging


    logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
    logger = logging.getLogger(__name__)

    debug_mode = context.get_x_argument(as_dictionary=True).get("debug", "0") == "1"

    if debug_mode:
    logger.setLevel(logging.DEBUG)
    print("DEBUG MODE ENABLED")
    else:
    print("DEBUG MODE NOT ENABLED")

    logger.debug(" Alembic env.py is executing")

    # ✅ Load environment variables
    DB_USER = os.getenv("PGUSER", "uuuuuuuuu")
    DB_PASSWORD = os.getenv("PGPASSWORD", "999999999999999999") # Replace with encoded password if needed
    DB_HOST = os.getenv("PGHOST", "uuuuuuuuuuuuuuu")
    DB_PORT = os.getenv("PGPORT", "111111")
    DB_NAME = os.getenv("PGDATABASE", "postgres")

    # ✅ Log database variables (masking password)
    logger.info("\n Alembic Database Variables:")
    logger.info(f" PGUSER: {DB_USER}")
    logger.info(f" PGPASSWORD: {'*' * len(DB_PASSWORD)}") # Mask password
    logger.info(f" PGHOST: {DB_HOST}")
    logger.info(f" PGPORT: {DB_PORT}")
    logger.info(f" PGDATABASE: {DB_NAME}")

    # ✅ Construct database URL
    DATABASE_URL = f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?sslmode=require"
    # ✅ Log and Print Debug Info
    logger.debug(f" Alembic is using this Database URL: {DATABASE_URL}")

    # ✅ Run Alembic
    config = context.config
    config.set_main_option("sqlalchemy.url", str(DATABASE_URL))


    TERMINAL OUTPUT

    Steve@DESKTOP-NRG7PHJ MINGW64 ~/Documents/GitHub/KUSA/kusa.marketing (main)
    $ alembic -x debug=1 upgrade head
    Traceback (most recent call last):
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__
    self._dbapi_connection = engine.raw_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3298, in raw_connection
    return self.pool.connect()
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect
    return _ConnectionFairy._checkout(self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1263, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout
    rec = pool._do_get()
    ^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get
    with util.safe_reraise():
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get
    return self._create_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection
    return _ConnectionRecord(self)
    ^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__
    self.__connect()
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect
    with util.safe_reraise():
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\create.py", line 646, in connect
    return dialect.connect(*cargs, **cparams)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 622, in connect
    return self.loaded_dbapi.connect(*cargs, **cparams)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\psycopg2\__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    psycopg2.OperationalError: connection to server at "AZURE.INSTANCE" (MYIP), port 5432 failed: FATAL: password authentication failed for user "USER"
    connection to server at "AZURE.INSTANCE" (MYIP), port 5432 failed: FATAL: no pg_hba.conf entry for host "SERVERIP", user "USER", database "postgres", no encryption


    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
    File "<frozen runpy>", line 198, in _run_module_as_main
    File "<frozen runpy>", line 88, in _run_code
    File "C:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Scripts\alembic.exe\__main__.py", line 7, in <module>
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\config.py", line 636, in main
    CommandLine(prog=prog).main(argv=argv)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\config.py", line 626, in main
    self.run_cmd(cfg, options)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\config.py", line 603, in run_cmd
    fn(
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\command.py", line 406, in upgrade
    script.run_env()
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\script\base.py", line 586, in run_env
    util.load_python_file(self.dir, "env.py")
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\util\pyfiles.py", line 95, in load_python_file
    module = load_module_py(module_id, path)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\alembic\util\pyfiles.py", line 113, in load_module_py
    spec.loader.exec_module(module) # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "<frozen importlib._bootstrap_external>", line 999, in exec_module
    File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
    File "C:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\alembic\env.py", line 11, in <module>
    from models import Base
    File "C:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\models.py", line 142, in <module>
    Base.metadata.create_all(engine)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\sql\schema.py", line 5900, in create_all
    bind._run_ddl_visitor(
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3248, in _run_ddl_visitor
    with self.begin() as conn:
    ^^^^^^^^^^^^
    File "C:\Users\Steve\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 137, in __enter__
    return next(self.gen)
    ^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3238, in begin
    with self.connect() as conn:
    ^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3274, in connect
    return self._connection_cls(self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 148, in __init__
    Connection._handle_dbapi_exception_noconnection(
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2439, in _handle_dbapi_exception_noconnection
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__
    self._dbapi_connection = engine.raw_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3298, in raw_connection
    return self.pool.connect()
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect
    return _ConnectionFairy._checkout(self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1263, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout
    rec = pool._do_get()
    ^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get
    with util.safe_reraise():
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get
    return self._create_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection
    return _ConnectionRecord(self)
    ^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__
    self.__connect()
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect
    with util.safe_reraise():
    ^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\create.py", line 646, in connect
    return dialect.connect(*cargs, **cparams)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 622, in connect
    return self.loaded_dbapi.connect(*cargs, **cparams)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "c:\Users\Steve\Documents\GitHub\KUSA\kusa.marketing\.venv\Lib\site-packages\psycopg2\__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "AZURE.INSTANCE" (MYIP), port 5432 failed: FATAL: password authentication failed for user "USER"
    connection to server at "AZURE.INSTANCE" (MYIP), port 5432 failed: FATAL: no pg_hba.conf entry for host "SERVERIP", user "USER", database "postgres", no encryption

    (Background on this error at: https://sqlalche.me/e/20/e3q8)

    Continue reading...

Compartilhe esta Página