prefect icon indicating copy to clipboard operation
prefect copied to clipboard

Ubuntu clean install sqlalchemy error when running prefect server start

Open jasonmellone opened this issue 3 months ago • 3 comments

Bug summary

I created a environment, pip install -U prefect and tried running prefect server start and get the below error.

Thanks for any help!

trace and pip freeze

$ python --version Python 3.12.7

$ prefect server start

 ___ ___ ___ ___ ___ ___ _____ 
| _ \ _ \ __| __| __/ __|_   _| 
|  _/   / _|| _|| _| (__  | |  
|_| |_|_\___|_| |___\___| |_|  

Configure Prefect to communicate with the server with:

    prefect config set PREFECT_API_URL=http://127.0.0.1:4200/api

View the API reference documentation at http://127.0.0.1:4200/docs

Check out the dashboard at http://127.0.0.1:4200



04:53:36.736 | ERROR   | uvicorn.error - Traceback (most recent call last):
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 147, in execute
    self._adapt_connection._handle_exception(error)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 298, in _handle_exception
    raise error
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 129, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
            ^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/cursor.py", line 48, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/cursor.py", line 40, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/core.py", line 132, in _execute
    return await future
           ^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/core.py", line 115, in run
    result = function()
             ^^^^^^^^^^
sqlite3.OperationalError: near "FROM": syntax error

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

Traceback (most recent call last):
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/starlette/routing.py", line 693, in lifespan
    async with self.lifespan_context(app) as maybe_state:
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/api/server.py", line 599, in lifespan
    await run_migrations()
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/api/server.py", line 508, in run_migrations
    await db.create_db()
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/interface.py", line 56, in create_db
    await self.run_migrations_upgrade()
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/interface.py", line 64, in run_migrations_upgrade
    await run_sync_in_worker_thread(alembic_upgrade)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/utilities/asyncutils.py", line 269, in run_sync_in_worker_thread
    result = await anyio.to_thread.run_sync(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/utilities/asyncutils.py", line 279, in call_with_mark
    return call()
           ^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/alembic_commands.py", line 28, in wrapper
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/alembic_commands.py", line 64, in alembic_upgrade
    alembic.command.upgrade(alembic_config(), revision, sql=dry_run)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/command.py", line 406, in upgrade
    script.run_env()
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/script/base.py", line 586, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
    module = load_module_py(module_id, path)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/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 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/migrations/env.py", line 179, in <module>
    run_async_from_worker_thread(apply_migrations)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/utilities/asyncutils.py", line 290, in run_async_from_worker_thread
    return anyio.from_thread.run(call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/from_thread.py", line 59, in run
    return async_backend.run_async_from_thread(func, args, token=token)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2481, in run_async_from_thread
    return f.result()
           ^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 456, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2468, in task_wrapper
    return await func(*args)
           ^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/migrations/env.py", line 168, in apply_migrations
    await connection.run_sync(do_run_migrations)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py", line 886, in run_sync
    return await greenlet_spawn(
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
    result = context.switch(value)
             ^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/migrations/env.py", line 137, in do_run_migrations
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/runtime/environment.py", line 946, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/runtime/migration.py", line 628, in run_migrations
    step.migration_fn(**kw)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/prefect/server/database/migrations/versions/sqlite/2024_09_16_162719_4ad4658cbefe_add_deployment_to_global_concurrency_.py", line 51, in upgrade
    op.execute(sql)
  File "<string>", line 8, in execute
  File "<string>", line 3, in execute
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/operations/ops.py", line 2551, in execute
    return operations.invoke(op)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/operations/base.py", line 442, in invoke
    return fn(self, operation)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/operations/toimpl.py", line 236, in execute_sql
    operations.migration_context.impl.execute(
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/ddl/impl.py", line 217, in execute
    self._exec(sql, execution_options)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/alembic/ddl/impl.py", line 210, in _exec
    return conn.execute(construct, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
    return meth(
           ^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 147, in execute
    self._adapt_connection._handle_exception(error)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 298, in _handle_exception
    raise error
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 129, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
            ^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/cursor.py", line 48, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/cursor.py", line 40, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/core.py", line 132, in _execute
    return await future
           ^^^^^^^^^^^^
  File "/home/{USER}/git/jm_prefect/.venv/lib/python3.12/site-packages/aiosqlite/core.py", line 115, in run
    result = function()
             ^^^^^^^^^^
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "FROM": syntax error
[SQL: 
            WITH deployment_limit_mapping AS (
                SELECT d.id AS deployment_id, l.id AS limit_id
                FROM deployment d
                JOIN concurrency_limit_v2 l ON l.name = 'deployment:' || d.id
            )
            UPDATE deployment
            SET concurrency_limit_id = dlm.limit_id
            FROM deployment_limit_mapping dlm
            WHERE deployment.id = dlm.deployment_id;
    ]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

04:53:36.741 | ERROR   | uvicorn.error - Application startup failed. Exiting.
Server stopped!
`




$ pip freeze
aiosqlite==0.20.0
alembic==1.13.3
annotated-types==0.7.0
anyio==4.6.2.post1
apprise==1.9.0
asgi-lifespan==2.1.0
asyncpg==0.30.0
attrs==24.2.0
cachetools==5.5.0
certifi==2024.8.30
cffi==1.17.1
charset-normalizer==3.4.0
click==8.1.7
cloudpickle==2.2.1
colorama==0.4.6
coolname==2.2.0
croniter==1.4.1
cryptography==43.0.3
dateparser==1.2.0
Deprecated==1.2.14
docker==6.1.3
exceptiongroup==1.2.2
fastapi==0.115.4
fsspec==2024.10.0
google-auth==2.35.0
graphviz==0.20.3
greenlet==3.1.1
griffe==1.5.1
h11==0.14.0
h2==4.1.0
hpack==4.0.0
httpcore==1.0.6
httpx==0.27.2
humanize==4.11.0
hyperframe==6.0.1
idna==3.10
importlib_metadata==8.4.0
Jinja2==3.1.4
jinja2-humanize-extension==0.4.0
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
kubernetes==27.2.0
Mako==1.3.6
Markdown==3.7
markdown-it-py==3.0.0
MarkupSafe==3.0.2
mdurl==0.1.2
oauthlib==3.2.2
opentelemetry-api==1.27.0
orjson==3.10.10
packaging==24.1
pathspec==0.12.1
pendulum==3.0.0
prefect==3.1.0
prometheus_client==0.21.0
pyasn1==0.6.1
pyasn1_modules==0.4.1
pycparser==2.22
pydantic==2.9.2
pydantic-extra-types==2.9.0
pydantic-settings==2.6.0
pydantic_core==2.23.4
Pygments==2.18.0
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
python-slugify==8.0.4
pytz==2023.4
PyYAML==6.0.2
readchar==4.2.0
referencing==0.35.1
regex==2024.9.11
requests==2.32.3
requests-oauthlib==2.0.0
rfc3339-validator==0.1.4
rich==13.9.3
rpds-py==0.20.1
rsa==4.9
ruamel.yaml==0.18.6
ruamel.yaml.clib==0.2.12
shellingham==1.5.4
six==1.16.0
sniffio==1.3.1
SQLAlchemy==2.0.36
starlette==0.41.2
text-unidecode==1.3
time-machine==2.16.0
toml==0.10.2
typer==0.12.5
typing_extensions==4.12.2
tzdata==2024.2
tzlocal==5.2
ujson==5.10.0
urllib3==2.2.3
uvicorn==0.32.0
websocket-client==1.8.0
websockets==13.1
wrapt==1.16.0
zipp==3.20.2

Version info

Version:             3.1.0
API version:         0.8.4
Python version:      3.12.7
Git commit:          a83ba39b
Built:               Thu, Oct 31, 2024 12:43 PM
OS/Arch:             linux/x86_64
Profile:             local
Server type:         unconfigured
Pydantic version:    2.9.2

Additional context

$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal

jasonmellone avatar Nov 01 '24 08:11 jasonmellone