Skip to content

sqlalchemy.Column parameters are not passed forward when set on sqlmodel.Field and a column is provided via sa_column #314

Description

@JLHasson

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

name: str = Field(
    sa_column=Column(
        String,
        # ... other attrs not exposed in sqlmodel.Field today
    ),
    index=True  # this is ignored, must be set on `Column` above
)

Description

sqlmodel.Field exposes some but not all fields from sqlalchemy.Column. This means in some cases it is necessary to provide a Column via the sa_column= param on sqlmodel.Field. However, when this is the case the parameters set on sqlmodel.Field are not forwarded to the new sa_column object.

I think the expected behavior here is that parameters set on Field would be combined with those from the sa_column object. Either this or setting a parameter that will be ignored should trigger a warning/exception along the lines of "You have set index but also provided a sqlalchemy.Column object, index will be ignored".

Operating System

Linux

Operating System Details

No response

SQLModel Version

0.0.6

Python Version

3.9.5

Additional Context

No response

Activity

  1. oldfielj-ansto commented on Apr 26, 2022

    @oldfielj-ansto

    @JLHasson I agree that this functionality doesn't really work as expected. I've seen a few other issues where people have run into similar issues, but I'm not sure there is a perfect solution to fix the problem.

    Maybe like you suggest a warning should be added, the docs could definitely use some improvement, as I don't think the "sa_column" parameter is even documented at the moment.

    For more complex projects I'd probably suggest people stick with vanilla SQLAlchemy.

  2. adpmhel24 commented on May 2, 2022

    @adpmhel24

    same issue, i hope they will fix it :(

  3. jinll2021 commented on Jun 23, 2022

    @jinll2021

    same issue, i hope they will fix it , hope sa_column will be more descriptions in the documentation,thanks

  4. ronalddas commented on Oct 11, 2022

    @ronalddas

    I spent quite some time, figuring out why indexes were not being set.
    Can we add this in the documentation atleast? It will be helpful for people who need to use custom datatypes like BIGINT and also need a index for that column

  5. tiangolo commented on Nov 11, 2022

    @tiangolo
    Member

    Yep, when you pass a Column you are overriding all the SQLAlchemy part, and those fields end up only used by Pydantic.

    I still have to document that, but that's the intention.

  6. github-actions commented on Nov 22, 2022

    @github-actions
    Contributor

    Assuming the original need was handled, this will be automatically closed now. But feel free to add more comments or create new issues or PRs.

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

    answeredquestionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions