본문 바로가기
Python

SQLAlchemy로 MySQL 데이터베이스 연결 및 쿼리하기

by 올엠 2024. 3. 2.
반응형

SQLAlchemy는 Python에서 데이터베이스를 연결하고 쿼리하는 데 사용할 수 있는 강력한 라이브러리이. MySQL을 포함한 다양한 데이터베이스와 호환된다.

데이터베이스 연결

SQLAlchemy를 사용하여 MySQL 데이터베이스에 연결하려면 먼저 create_engine() 함수를 사용해. 이 함수의 인수에는 데이터베이스 연결 정보가 포함된다.

import sqlalchemy as db

database_url = "mysql+pymysql://username:password@host:port/database"
engine = db.create_engine(database_url)

위 예제에서는 다음과 같은 데이터베이스 연결 정보를 사용한다.

사용자 이름: username
비밀번호: password
호스트: host
포트: port
데이터베이스 이름: database

데이터베이스에 연결되었는지 확인하려면 engine.connect() 함수를 사용해. 이 함수는 연결된 경우 True를 반환하고 연결되지 않은 경우 False를 반환하여 확인이 가능하다.

conn = engine.connect()

if conn:
    print("데이터베이스에 연결되었어.")
else:
    print("데이터베이스에 연결되지 않았어.")

T-SQL 구문 사용

T-SQL 구문을 사용하여 SQLAlchemy를 통해 데이터베이스를 쿼리할 수도 있어. 이렇게 하려면 execute() 함수를 사용해.

query = "SELECT * FROM table"

conn.execute(query)

위 예제에서는 table 테이블의 모든 행을 선택할 수 있다.

Metadata 사용

Metadata를 사용하여 SQLAlchemy를 통해 데이터베이스를 쿼리하는 것이 더 편리할 수도 있어. 이렇게 하려면 MetaData() 클래스를 사용하여 Metadata 객체를 만들고 Table() 클래스를 사용하여 테이블 객체를 만들면 돼.

metadata = db.MetaData()

table = db.Table("table", metadata, autoload=True, autoload_with=engine)

위 예제에서는 table 테이블의 Metadata 객체를 만든다.

아래와 같이 테이블 객체를 사용하여 select() 메서드를 사용하여 데이터를 선택할 수 있다.

query = db.select([table])

results = conn.execute(query).fetchall()

위 예제에서도 table 테이블의 모든 행을 선택하여, T-SQL문과 동일한 효과를 가지고 있다.

여기에 T-SQL보다 보다 가독성 있도록 T-SQL문을 활용할 수 있다.

필터링

where() 메서드를 사용하여 쿼리에 조건을 추가할 수 있다.

query = db.select([table]).where(table.columns.columnname == "value")

위 예제에서는 columnname 열의 값이 value인 행을 선택하게 된다.

in_() 메서드를 사용하여 IN 조건을 추가할 수 있다.

query = db.select([table]).where(table.columns.columnname.in_(["value1", "value2"]))

위 예제에서는 columnname 열의 값이 value1 또는 value2인 행을 선택하게 된다.

and_(), or_(), not_() 메서드를 사용하여 AND, OR, NOT 조건을 추가할 수 있다.

query = db.select([table]).where(
    db.and_(
        table.columns.columnname == "value1",
        table.columns.columnname != "value2",
    )
)

 

위 예제에서는 columnname 열의 값이 value1이고 value2이 아닌 행을 선택하게 된다.

Query 관련해서 아래 문서를 참고하면 보다 자세히 확인이 가능하다.

https://docs.sqlalchemy.org/en/14/orm/query.html

반응형