Python3 - SQLAlchemy 사용하기

심준보·2023년 1월 13일
0

SQL

목록 보기
1/3
post-thumbnail

SQLAlchemy

SQLAlchemy는 인기있는 SQL 툴킷이며 Object Relational Mapper이다. 이것은 파이썬으로 작성되었고 응용 프로그래머에게 강력한 기능과 풍붕한 SQL의 유연성을 제공한다. MIT 라이선스에 따라 출시된 오픈 소스 및 크로스 플랫폼 소프트웨어입니다.

#connection

import sqlalchemy as db

engine = db.create_engine('mysql+pymysql://test:test123!!@db.database.com/db_name')

connection 확인

connection = engine.connect()
metadata = db.MetaData()
table = db.Table('table_name', metadata, autoload=True, autoload_with=engine)


print(table.columns.keys())
  • 연결이 잘 되었는지 보기 위해 아래 코드를 추가한 후 실행했을때 column key들이 출력되면 정상적으로 연결은 완료된 것이다.

# Query - SELECT

  • Database에 있는 table의 정보를 가져와 보도록 해보자
table = db.Table('table_name', metadata, autoload=True, autoload_with=engine)

# select * from table 과 같음
query = db.select([table])

# 이때 query의 내용을 출력해보면 sql query인 것을 알 수 있음
print(query)

# 쿼리 실행
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()

# 결과 print 이때 10개만 출력하도록 함. 단순한 set 자료구조의 형태를 하고 있음.
print(result_set[:10])
  • select시 조건을 설정할 수 있다. 예로 ,password column의 값이 0809인 것을 가져오려면 아래와 같은 코드를 작성하면 된다.
query = db.select([table]).where(table.columns.password == '0809')

  • 다음으로는 , 중요한 null check 이다 .
    아래와 같은 코드를 입력하면 가능하다.
query = db.select([table]).where(table.columns.password.isnot(None))

  • 이 외에도 in, and, or, not, order by, functions, group by, cast, cast 등 mysql에서 지원하는 모든 조건문과 함수 등을 지원한다.

# Query-INSERT

  • table 이라는 변수에 DB의 METADATA정보를 저장했다면 INSERT가 쉽다.
    pymysql 보다 더 간편하다고 볼 수 있다.
query = db.insert(table).values(values) # 이때 values는 table의 column의 순서와 갯수가 일치해야 함
result_proxy = connection.execute(query)
result_proxy.close()
  • 한꺼번에 많은 record를 넣고 싶다면 다음 코드를 참조하도록 하자
query = db.insert(table)
values_list = [{'id': 'dork', 'passwd': '1234'}, {'id': 'test', 'passwd':'test123', 'email':'test@test.com'}]
result_proxy = connection.execute(query, values_list)
result_proxy.close()
  • 위와 같이 List 자료구조 안에 Dictionary 를 넣어주면 Dictionary 수 만큼 한번에 Insert할 수 있다.

이상으로 Python3 - SQLAlchemy 사용하기를 간략하게 마무리하도록 하겠습니다.


더 나은 개발이 되길 바라며:)

profile
밑거름이라고생각합니다

0개의 댓글