Zio.Entity()
PostgreSQL usr 스키마의 표를 다룹니다. 표를 세우고 없애는 것까지 되지만 칸 구성은 못 바꿉니다 — 그것이 되는 것은 Zio.code 뿐입니다. 넷을 견주어 보려면 Zio.Database (개요) 의 표를 보십시오.
커스텀 테이블 API
섹션 제목: “커스텀 테이블 API”PostgreSQL의 usr 격리 스키마 내에 테이블을 동적 생성하고(DDL), 보안 처리(SQL Injection 방어)가 적용된 CRUD 연동(DML)을 Fluent API 체이닝 형태로 처리할 수 있습니다.
| Method | Description |
|---|---|
Zio.entity(table_name) |
PostgreSQL 테이블 및 뷰 조작을 위한 Fluent API 체이닝의 시작점입니다. |
.create_table(columns, display_name, description) |
컬럼 정보 리스트(name, type, pk, nullable 등)를 받아 테이블 및 시스템 메타데이터를 선제 생성합니다. 같은 이름이 이미 있으면 거절합니다 — 지우고 다시 만들려면 아래 .drop_table() 을 먼저 부르십시오. |
.drop_table(force=False) |
표를 통째로 지웁니다. **되돌릴 수 없습니다.**행이 하나라도 남아 있으면 거절하고 몇 행인지 알려 줍니다 — 잘못 만든 빈 표를 치우는 일과, 사람이 채워 온 대장을 날리는 일은 다르기 때문입니다. 그래도 지우려면 force=True 를 주십시오. Zio.raw("DROP TABLE …") 는 막혀 있습니다 — 그쪽은 usr 스키마 밖으로도 나갈 수 있었습니다. |
.create(props) |
테이블에 새로운 데이터 행을 삽입(INSERT)합니다. |
.where(**kwargs) |
조건절(Filters)을 지정합니다. (예: id=1, source_file__contains="manual" 등) |
.where_or(**kwargs) |
같은 표의 여러 조건을 OR 로 묶습니다(다른 .where() 와는 AND). 키워드 검색처럼 여러 칸 중 하나라도 맞으면 될 때 씁니다 — 예전엔 질의를 여러 번 나눠 파이썬에서 합쳐야 했습니다. 접미사(__contains 등)는 .where() 와 같습니다. 여러 번 부르면 각 호출이 별개의 OR 덩어리가 되어 서로 AND 로 이어집니다. fetch()·count()(읽기)에만 걸립니다 — update()·delete() 에 OR 을 걸면 의도보다 많은 행을 건드릴 수 있어 받지 않습니다. (예: .where_or(title__contains=kw, body__contains=kw)) |
.columns(*names) |
fetch() 에서 돌려받을 컬럼만 고릅니다. 안 주면 전체(SELECT *). 필요한 칸만 읽어 메모리·속도를 아낍니다 — 무거운 칸(예: 패스워드 해시)을 안 끌어옵니다. (예: Zio.entity("users").columns("user_name", "aliases").fetch()) |
.update(props) |
조건절(where)에 부합하는 데이터 행을 수정(UPDATE)합니다. |
.delete() |
조건절(where)에 부합하는 데이터 행을 삭제(DELETE)합니다. |
.fetch() |
조건절(where)에 부합하는 데이터를 조회(SELECT)하여 GraphResult로 가져옵니다. |
커스텀 테이블 Fluent CRUD 실전 예제
섹션 제목: “커스텀 테이블 Fluent CRUD 실전 예제”from zio_ontology import Zio
# 1. 테이블 선제 생성 (DDL)def initialize_database(): columns = [ {"name": "id", "type": "Integer", "pk": True}, {"name": "source_file", "type": "String", "nullable": True}, {"name": "content", "type": "Text", "nullable": True} ] # usr."test_manual" 테이블 생성 및 메타데이터 자동 등록 Zio.entity("test_manual").create_table(columns=columns, display_name="테스트 매뉴얼")
# 2. CRUD 시나리오 수행 (DML)def run_db_operations(): # 데이터 삽입 (Create) new_row = Zio.entity("test_manual").create({ "source_file": "manual_v1.pdf", "content": "사출성형 온도 관리 수칙..." }).data # 데이터 수정 (Update) Zio.entity("test_manual").where(source_file="manual_v1.pdf").update({ "content": "사출성형 온도 및 압력 관리 수칙..." }) # 데이터 조회 (Fetch) results = Zio.entity("test_manual").where(source_file__contains="manual").fetch().data print(results) # 데이터 삭제 (Delete) Zio.entity("test_manual").where(id=1).delete()칸을 바꾸는 손잡이는 없습니다
섹션 제목: “칸을 바꾸는 손잡이는 없습니다”
usr표는 세우거나 없애거나 둘 중 하나입니다.add_column·drop_column·rename_column을 부르면 왜 없고 어떻게 해야 하는지를 담은AttributeError가 옵니다.칸을 바꿔야 하면 — 새 이름으로
create_table하고, 옮길 값을 넣고, 옛 표를drop_table(force=True)하십시오. 칸을 자유로이 바꿀 수 있는 것은 기초코드뿐입니다(Zio.code) — 그쪽은 행의 값도 같이 옮겨 주기 때문입니다.