sqlmodel icon indicating copy to clipboard operation
sqlmodel copied to clipboard

How to deal with column type needed situation?

Open Ma233 opened this issue 4 years ago • 1 comments

First Check

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

Commit to Help

  • [X] I commit to help with one of those options 👆

Example Code

from sqlmodel import SQLModel, UniqueConstraint, select


class BookCollection(SQLModel, table=True):
    user_nid: int
    book_nid: int


UniqueConstraint(
    BookCollection.user_nid,  # Argument of type "int" cannot be assigned to parameter "columns" of type "str | Column[Any]" in function "__init__"
    BookCollection.book_nid,  # Argument of type "int" cannot be assigned to parameter "columns" of type "str | Column[Any]" in function "__init__"
    name="uidx_book_collection_user_nid_book_nid",
)

# Cannot access member "not_in" for type "int"
select(BookCollection).where(BookCollection.book_nid.not_in([1, 2, 3]))

Description

Some APIs of sqlalchemy may still need a column type. Without that, a type checker will complain. Currently, I'm using type: ignore to skip those.

Operating System

Linux, macOS

Operating System Details

No response

SQLModel Version

0.0.4

Python Version

3.8.6

Additional Context

No response

Ma233 avatar Sep 14 '21 08:09 Ma233

from sqlmodel import SQLModel, select, Column from sqlalchemy import UniqueConstraint from typing import List

class BookCollection(SQLModel, table=True): user_nid: int book_nid: int

Define the table's UniqueConstraint using SQLAlchemy's Column objects

uidx_book_collection = UniqueConstraint( Column("user_nid", Integer), # Specify the column type Column("book_nid", Integer), # Specify the column type name="uidx_book_collection_user_nid_book_nid" )

Use a list to specify the column names for the "in_" condition

book_nids: List[int] = [1, 2, 3] query = select(BookCollection).where(BookCollection.book_nid.in_(book_nids))

print(uidx_book_collection) print(query)

ljluestc avatar Sep 03 '23 20:09 ljluestc