콘텐츠로 이동

Zio.Entity()

PostgreSQL usr 스키마의 표를 다룹니다. 표를 세우고 없애는 것까지 되지만 칸 구성은 못 바꿉니다 — 그것이 되는 것은 Zio.code 뿐입니다. 넷을 견주어 보려면 Zio.Database (개요) 의 표를 보십시오.

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) — 그쪽은 행의 값도 같이 옮겨 주기 때문입니다.