SQL Alchemy
ORM 이란? : Object Relational Mapping
데이터 베이스를 객체화 시켜서 데이터 베이스에 있는 데이터를 CRUD(create,read,update,delete)할수 있습니다. 쿼리 대신 함수 형태로 CRUD를 할수 있습니다. 사용하는 데이터 베이스를 변경하는 경우 엔진을 바꾸면 됩니다. 따라서 쿼리문을 몰라도 데이터 베이스를 조작할수 있습니다.
1 | from sqlalchemy import * |
데이터 베이스 연결
1 | engine = create_engine("mysql://root:***@<퍼블릭 ip>/test") |
테이블 객체 생성을 위한 클래스 작성
1 | Base = declarative_base() |
데이터 베이스와 객체를 연결
1 | # engine에 연결된 데이터 베이스(test)에 테이블 생성 |
session 은 데이터 베이스와 연결된 객체입니다.데이터 베이스 접속 정보가 들어 있습니다. session을 통해 데이터 베이스에 데이터를 넣고, 삭제하고 수정해 보겠습니다.
데이터 베이스 연결 -> 테이블 객체 생성을 위한 클래스 작성 -> 데이터 베이스와 객체를 연결후 사용
1. Insert
session객체를 통해 데이터 배이스에 데이터를 넣어보겠습니다. 1
2
3
4
5
6
7# insert
user = User("howard","howard@thisisemail.com",27,"2016-03-21")
# session 객체에 데이터가 저장
session.add(user)
# run tranaction : 이순간 데이터 베이스에 저장
session.commit()
insert 여러개 해보면 1
2
3
4
5
6users = [
User("alice","alice@gmail.com",25,"2018-02-21"),
User("andy","andy@daum.net",33,"2015-10-21"),
]
session.add_all(users) # 데이터 저장
session.commit() # commit으로 데이터 베이스에 저장
rollback : session안에 있는 객체를 초기화 시킵니다. 1
session.rollback()
2. Select
SQL의 Select처럼 데이터 프레임의 데이터들을 봅시다. 1
2# select all
results = session.query(User).all()
filter : ==, !=, >, <, <=, >=, like, in 등 SQL의 쿼리문 기능을 다 쓸수 있습니다. SQL WHERE 처럼 사용 가능합니다 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16results = session.query(User).filter(User.name=="howard")
# filter : like
results = session.query(User).filter(User.email.like("%gmail%"))
# filter : in_
results = session.query(User).filter(User.name.in_(["alice","andy"]))
# filter : or_
results = session.query(User).filter(or_(User.name == "howard", User.age == 33))
# order by : desc, asc(내림차순, 오름차순 정렬)
results = session.query(User).order_by(User.age.desc())
# count
session.query(User).count()
3. Updata
데이터 베이스의 데이터를 수정해봅시다. 1
2
3
4
5
6
7
8# data에 andy의 row데이터 가져와서
data = session.query(User).filter(User.name == "howard").one()
# age라는 칸에 30 넣어주고
data.age = 30
# session에 담아서
session.add(data)
# commit
session.commit()
4. Delete
데이터를 삭제해 봅시다.
1 | # delete row |
5. With Pandas
판다스와 함께 사용해봅시다. 1
2
3
4
5
6
7
8
9import seaborn as sns
import pandas as pd
# 데이터 프레임을 데이터 베이스에 넣기
iris_df = sns.load_dataset("iris")
# iris_df 데이터를 iris라는 이름으로
# engine에서 지정된 데이터 베이스로 보냅니다.
# 만약 존재한다면 대체(replace)합니다.
iris_df.to_sql(name="iris",con=engine,if_exists="replace")