728x90
반응형

Programming Language 59

[SQLAlchemy] 7. 데이터베이스 ORM 상태 관리

데이터베이스 ORM 상태 관리ORM에서 클래스는 데이터베이스 테이블을 나타내고, 클래스의 인스턴스는 데이터베이스의 행을 나타냄Instance 생성: 처음 instance 생성 후에는 transient 상태(아직 데이터베이스 session과 연결되어 있지 않은 상태)squidward = User(name="squidward", fullname="Squidward Tentacles")krabs = User(name="ehkrabs", fullname="Eugene H. Krabs")Session 추가: 추가 후 instance들은 pending 상태(데이터베이스에 삽입할 준비가 됨)session = Session(engine)session.add(squidward)session.add(krabs)Flushi..

[SQLAlchemy] 6. ORM을 사용한 UPDATE

UPDATE 구문update() 함수는 SQL의 UPDATE 구문을 생성from sqlalchemy import updatestmt = ( update(user_table) .where(user_table.c.name == "patrick") .values(fullname="Patrick the Star"))# UPDATE user_account SET fullname=:fullname WHERE user_account.name = :name_1Update.values(): SET 절의 값을 설정. 여러 값을 업데이트할 때는 bindparam()을 사용하여 바인드 매개변수 설정from sqlalchemy import update, bindparamfrom sqlalchemy.orm imp..

[SQLAlchemy] 5. ORM을 사용한 SELECT

SELECT 구문 실행stmt = select(user_table).where(user_table.c.name == "spongebob")# Core 방식with engine.connect() as conn: for row in conn.execute(stmt): print(row)# ORM 방식stmt = select(User).where(User.name == "spongebob")with Session(engine) as session: for row in session.execute(stmt): print(row) select() 함수여러 개의 컬럼과 테이블을 받아서 SELECT 쿼리를 구성stmt = select(user_table)# SELECT * FROM..

[SQLAlchemy] 4. ORM을 사용한 INSERT

ORM을 사용한 INSERT 예제1. 데이터베이스 엔진 및 베이스 클래스 생성from sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.orm import DeclarativeBase, sessionmaker# 데이터베이스 엔진 생성engine = create_engine("sqlite+pysqlite:///:memory:", echo=True)# 베이스 클래스 생성class Base(DeclarativeBase): pass2. ORM 매핑 클래스 정의class User(Base): __tablename__ = 'user_account' id = Column(Integer, primary_key=True) ..

[SQLAlchemy] 3. MetaData

MetaDataMetaData란 데이터베이스 구조와 schema를 기술하는 데이터에 대한 데이터Database table, column, data type, index, restriction, trigger, view 등을 설명하는 정보 포함데이터베이스의 스키마를 정의하고 관리하는 역할SQLAlchemy Core(SQL을 직접 작성, Connection 사용)과 ORM(객체 지향 접근 방식, Session 사용)에서 모두 MetaData를 사용하여 SQL 쿼리를 작성하고 실행 가능Core의 경우 MetaData 객체를 생성하는 방식으로 사용되며, 주로 Connection 객체와 함께 사용Connection 객체는 낮은 수준의 SQL 작업을 수행하는 데 적합Session 객체를 사용할 수 있긴 함. 이 경..

[SQLAlchemy] 2. Connection, Commit, Query, Bound parameters

Connection앞서 생성한 엔진 객체의 유일한 목적은 데이버테이스와의 연결을 제공하는 Connection 객체를 생성하는 것데이터베이스와의 모든 상호작용은 Connection 객체를 통해서 이루어짐Connection 객체는 데이터베이스에 대한 열린 리소스를 나타내기에, 객체의 사용범위를 특정 context로 제한해야 함즉 Connection 객체를 통한 데이터베이스 처리가 끝났으면 Connection을 닫아서 잘 종료해야한다는 것with 문과 사용하는 것이 좋음# Hello world 예제# text() 함수는 SQLAlchemy에서 원래 쓰던 SQL 구문을 그대로 사용할 수 있도록 해주는 함수# ORM은 추후에..from sqlalchemy import create_engine, textengine..

[SQLAlchemy] 1. Engine

EngineSQLAlchemy application에서 데이터를 연결하기 위한 객체특정 데이터베이스에 대한 연결의 중앙소스로 작동데이터베이스 연결을 위한 factory 역할과 connectection pool 제공일반적으로 특정 데이터베이스에 서버에 대해서 한 번만 전역 객체로 생성create_engine() 함수로 생성PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server 등 여러 데이터베이스를 지원함# SQLite 연결 예시from sqlalchemy import create_engineengine = create_engine("sqlite+pysqlite:///:memory:", echo=True)dialect+driver://username:passwo..

[FastAPI] 12. Update: PUT, PATCH

PUT, PATCHPUT 요청은 전체 객체를 대체하는 데 사용클라이언트가 전체 객체를 제공하여 서버에 저장된 기존 객체를 완전히 대체@app.put("/items/{item_id}", response_model=Item)async def update_item(item_id: str, item: Item): update_item_encoded = jsonable_encoder(item) items[item_id] = update_item_encoded return update_item_encodedPATCH 요청은 부분 업데이트에 사용클라이언트가 업데이트하려는 필드만 제공하고, 나머지 필드는 그대로 유지exclude_unset 옵션True로 설정 시: Pydantic 모델에서 설정되지 않은..

[FastAPI] 11. JSON 호환 인코더: jsonable_encoder

jsonable_encoderFastAPI에서는 데이터 타입(Pydantic 모델 등)을 JSON 호환 형태(예: dict, list 등)로 변환해야 하는 경우 사용ex) 데이터베이스에 저장할 때, JSON으로 응답할 때작동원리 예시Pydantic 모델 변환: Pydantic 모델을 딕셔너리로 변환datetime 변환: datetime 객체를 ISO 형식의 문자열로 변환UUID 변환: UUID 객체를 문자열로 변환Enum 변환: Enum 객체를 해당 값으로 변환set 변환: set 객체를 리스트로 변환JSON 호환 형태 반환: 최종적으로 JSON으로 직렬화할 수 있는 Python 표준 데이터 구조(딕셔너리, 리스트 등)를 반환from datetime import datetimefrom fastapi im..

[FastAPI] 10. Form Data & Request File

Form과 FileHTML의 form()은 데이터를 서버에 전송할 때 JSON과 다른 인코딩 방식을 사용하기에 Form()을 사용해서 처리Form 안에서 파일 업로드를 하는 부분에 대해서는 File()이나  UploadFile() 형식으로 처리즉, HTML의 form 안에 있는 데이터를 처리할 때, 파일 형식이라면 File(), UploadFile()을 쓰고 나머지는 Form() 사용 Username: Password: File: Upload from typing import Annotatedfrom fastapi import FastAPI, Form, File, UploadFileapp = Fast..

728x90
반응형