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 관련해서 아래 문서를 참고하면 보다 자세히 확인이 가능하다.
'Python' 카테고리의 다른 글
Python - 지역 변수와 전역 변수 그리고 global (0) | 2024.03.02 |
---|---|
Python - 파이썬 코드 실행 시간 측정 perf_counter, process_time 차이점 (0) | 2024.03.02 |
Pylint - docstring "Missing function or method docstring" 메시지 (0) | 2024.03.02 |
Python - Zipfile 한글 파일이름 깨짐 해결하기 (0) | 2024.03.01 |
Sqlachemy - 특정 날짜 하루의 데이터를 가져오기 (0) | 2024.02.29 |