Skip to content

Is SQLModel naturally async aware ? #129

Description

@joaopfg

First Check

  • I added a very descriptive title to this issue.
  • I used the GitHub search to find a similar issue and didn't find it.
  • I searched the SQLModel documentation, with the integrated search.
  • I already searched in Google "How to X in SQLModel" and didn't find any information.
  • I already read and followed all the tutorial in the docs and didn't find an answer.
  • I already checked if it is not related to SQLModel but to Pydantic.
  • I already checked if it is not related to SQLModel but to SQLAlchemy.

Commit to Help

  • I commit to help with one of those options 👆

Example Code

No code available

Description

Can I use SQLModel inside my FastAPI async endpoint implementations without problems ? Apparently it works. But I'm not sure if it's destroying the asynchronicity.

Operating System

Linux

Operating System Details

No response

SQLModel Version

0.0.4

Python Version

3.9.5

Additional Context

No response

Activity

  1. SteffRainville commented on Oct 17, 2021

    @SteffRainville

    Look at issue #54

    You can get an Async enginedirectly from SQLAlchemy

    Looking at the SQLmodel code directly the engine is not async

  2. raulolteanu-sudo commented on Dec 10, 2021

    @raulolteanu-sudo

    Just Jumping in on the conversation for the sake of not raising another issue:

    Using SQLModel's version of AsyncSession and stumbled by this warning while running some tests on the code:

    
      /home/user/git_repos/project/venv/lib/python3.9/site-packages/sqlmodel/orm/session.py:60: SAWarning: Class SelectOfScalar will not make use of SQL compilation caching as it does not set the 'inherit_cache' attribute to ``True``.  This can have significant performance implications including some performance degradations in comparison to prior SQLAlchemy versions.  Set this attribute to True if this object can make use of the cache key generated by the superclass.  Alternatively, this attribute may be set to False which will disable this warning. (Background on this error at: https://sqlalche.me/e/14/cprf)
        results = super().execute(
    
    -- Docs: https://docs.pytest.org/en/stable/warnings.html
    
    

    short version:

    Class SelectOfScalar will not make use of SQL compilation caching as it does not set the 'inherit_cache' attribute to ``True``
    

    Has anybody bumped into this ?

  3. Kaelten commented on Mar 2, 2022

    @Kaelten

    @raulolteanu-sudo Check out #189, the workaround at the end should help with that.

  4. andrewmarcus commented on May 4, 2022

    @andrewmarcus

    https://testdriven.io/blog/fastapi-sqlmodel/

    The author is using SQLAlchemy's async engine and session rather than SQLModel's to execute the queries; hence session.execute() rather than session.exec(). Consequently you lose some of the mypy typing benefits that SQLModel brings, but looks like it otherwise works.

    On the other hand, it would be nice to bring native support into SQLModel, especially since @tiangolo's other project, FastAPI, is all about asyncing all the things... 😄

  5. failable commented on Jul 18, 2024

    @failable

    Any updates?

  6. monchin commented on Jul 23, 2024

    @monchin

    Any updates?

    Currently I'm using

    from sqlmodel.ext.asyncio.session import AsyncSession
    from sqlalchemy.ext.asyncio import create_async_engine
    from sqlmodel import select
    
    # sqlite for example
    db_path = "/path/to/db"
    uri = f"sqlite+aiosqlite:///{db_path}"
    aengine = create_async_engine(uri, echo=True)
    
    async with AsyncSession(aengine) as session:
        stmt = select(***) # whatever you need to do
        results = await session.exec(stmt)
        data_to_add = YourModel(assign value here)
        session.add(data_to_add)
        data_to_del = results.first()
        await session.delete(data_to_del)
        await session.commit()

    I also hope the async tutorial would be finished as soon as possible

  7. locked and limited conversation to collaborators on May 18, 2026
  8. converted this issue into a discussion #1936 on May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions