How to deal with column type needed situation?
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
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)