728x90
데이터 구조
object_id | col_name |
---|---|
OBJ00000000000000003 | 시도 |
OBJ00000000000000002 | 시도 |
OBJ00000000000000100 | 시도 |
문제 상황
데이터 조회가 제대로 되지 않음.
for row in session.query(DatalakeType1Columns).all():
logger.info(f"ID: {row.object_id}, ColName: {row.col_name}")
위 코드에서, 내가 원하는 건 id 3, 2, 100에 대한 데이터를 모두 가져오는 것이었다.
근데 3밖에 안가져와짐
commit 하고 expire_all() 해봐도 마찬가지
근데 DB 에는 제대로 데이터가 모두 들어가 있다.
object_id, col_name 을 복합키로 인식하지 않고 col_name 을 따로 하나의 키로 인식해서 데이터를 합치는 듯 했다.
그래서 명시가 제대로 되지 않은 것으로 판단하여 model 을 변경함
해결법
PrimaryKeyConstraint
를 사용해서 model에서 복합키를 명시적으로 정의해주면 됨.
공식문서
https://docs.sqlalchemy.org/en/20/core/constraints.html#primary-key-constraint
기존 Model
class DatalakeType1Columns(SQLModel, table=True):
__tablename__ = 'datalake_type1_object_columns'
object_id: str = Field(default=None, primary_key=True, max_length=50) # Primary Key (object_id)
col_name: str = Field(default=None, primary_key=True, max_length=255) # Primary Key (col_name)
col_name_eng: Optional[str] = Field(default=None, max_length=255)
col_type: Optional[str] = Field(default=None, max_length=50)
col_size: Optional[int] = Field(default=None)
col_desc: Optional[str] = Field(default=None)
show_yn: Optional[str] = Field(default=None, max_length=10)
del_yn: Optional[str] = Field(default=None, max_length=10)
# Foreign Key 설정
object_id: Optional[str] = Field(foreign_key='datalake_type1.object_obj_id')
변경 후 Model
class DatalakeType1Columns(SQLModel, table=True):
__tablename__ = 'datalake_type1_object_columns'
object_id: str = Field(default=None, max_length=50) # Primary Key (object_id)
col_name: str = Field(default=None, max_length=255) # Primary Key (col_name)
col_name_eng: Optional[str] = Field(default=None, max_length=255)
col_type: Optional[str] = Field(default=None, max_length=50)
col_size: Optional[int] = Field(default=None)
col_desc: Optional[str] = Field(default=None)
show_yn: Optional[str] = Field(default=None, max_length=10)
del_yn: Optional[str] = Field(default=None, max_length=10)
# Foreign Key 설정
object_id: Optional[str] = Field(foreign_key='datalake_type1.object_obj_id')
# 복합키 정의
__table_args__ = (
PrimaryKeyConstraint('object_id', 'col_name'),
)
728x90
'개발 > 파이썬' 카테고리의 다른 글
python pakage manage using uv (0) | 2024.12.10 |
---|---|
[Pydantic] langchain import Document Error (0) | 2024.11.21 |
Langchain mulltiple edges error, Graph Parallel Processing (0) | 2024.11.12 |
PGVector Insert using SQLModel (2) | 2024.11.07 |
[pandas] (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape (0) | 2023.04.26 |