ORM = Object-Relational Mapping
SQLAlchemy = 파이썬에서 가장 많이 사용되는 ORM
DBAPI = Python Database API Specification
설치
pip install --pre sqlalchemy (1.4 베타버전 설치하기위해 , 파이썬3과 호환)
데이터베이스와의 연결
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
engine=create_engine("데이터베이스 주소")
Base = declarative_base()
예)
engine = create_engine("sqlite:///:memory:")
테이블 생성
만약 SQL로 테이블을 생성한다면
CREATE TABLE user(
id INTEGER PRIMARY KEY,
name STRING,
age INTEGER
)
ORM으로 생성한다면
from sqlalchemy import Column, Integer, String
class User(Base):
__tablename__ = 'User'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
테이블 칼럼
칼럼 이름을 따로 명시해주고 싶을때
random_col = Column('age', Integer)
또는 키워드값으로도 명시가능
random_col = Column(Integer, name='age')
__repr__
class User(Base):
__tablename__ = "user"
(... 생략 ...)
def __repr__(self):
return f"User {self.id}: {self.name}"
repr : 다음과 같이 인스턴스를 확인할 때 원하는 정보를 볼 수 있기 때문에 유용
Pikachu = User(name='Pikachu', age=30)
print(pikachu) #=> "User 1: Pikachu"
만약에 설정이 되어 있지 않은 경우에는 다음과 같이 표시
print(pikachu) #=> "User(id=None, name="pikachu", age=30)"
스키마 생성
Base.metadata.create_all(engine) #
Base.metadata.drop_all(engine) # 만든 테이블 삭제
Session 생성
ORM 으로 매핑된 객체들을 활용한 지속적 작업을 관리해주는 역할
from sqlalchemy.orm import sessionmaker
session = sessionmaker(bind=engine)
초기에 엔진을 바인딩하지 않았다면 다음과 같이 설정
session = sessionmaker()
session.configure(bind=engine)
만약에 세션 객체가 엔진이 바인딩이 되어 있지 않은 경우에는 UnboundExecutionError 라는 SQLA 에러
데이터베이스 작업
Create
pikachu = User(name="Pikachu", age=30)
session = Session(bind=engine)
session.add(pikachu)
session.commit() # commit 안하고 종료하면 rollback 발생
Delete
pikachu = session.query(User).filter_by(name='Pikachu').first()
session.delete(pikachu)
session.commit()
조회
pikachu = session.query(User).filter_by(name='Pikachu').first()
print(pikachu.name) #pikachu
print(pikachu.age) #30
변경
pikachu.name = 'kobugi'
print(pikachu.name) #kobugi
Session 종료
세션을 종료하게 되면 따로 롤백 함수를 실행하지 않아도 알아서 롤백 해줌. 편리
Google Colab sqlalchemy doc
Google Colaboratory
colab.research.google.com
이미지 출처 : files.realpython.com/media/Python-and-Sqlite-and-SqlAlchemy-Oh-My_Watermarked.11096d6ed0d9.jpg
이미지 출처 : cdn.educba.com/academy/wp-content/uploads/2020/01/what-is-orm.jpg
728x90
'AI월드 > ⚙️AI BOOTCAMP_Section 3' 카테고리의 다른 글
정적웹과 동적웹_Day52 (0) | 2021.03.19 |
---|---|
API 기초개념, REST API_Day51 (0) | 2021.03.18 |
웹크롤링 기초,파이썬,Beautifulsoup_Day48(2) (0) | 2021.03.15 |
DOM 개념_Day48 (0) | 2021.03.15 |
docker 과제 다시풀어보기(part1,2,3) (0) | 2021.03.13 |
댓글