본문 바로가기

Python

Python SQLAlchemy

mysql과의 연결성은 다음과 같음

 

[db]

sql_connection = mysql+pymysql://my_database:pass@mysqlurl/my_database_name?charset=utf8

mysql안에 my_database_name이라는 database를 만들어 둔 상태에서 연결

 

처음부터 구성한 것은 아니라서 query와 model 선언에 대한 것만 작성

import sqlalchemy as sa

class DataBaseModel(base_model.Base, base_model.ModelBase):
    __tablename__ = 'mysql_table'
    
    option1 = sa.Column(sa.String(20), nullable=False)
    created_dt = sa.Column(sa.Datetime, nullable=False)
    
    __table_args__ = (
        sa.UniqueConstraint('option1'))
        
      def __init__(self, check_exc=True):
          super(DataBaseModel, self).__init__()

basemodel에 대해 이해가 부족하여 해당 부분의 설명과 설정을 건너 뜀

 

__tablename__ 는 연결된 mysql의 database에서 정의된 table이름을 정확히 작성

sa.Column은 해당 table에서 정의된 Column을 연결

type은 여러가지가 있는데 text나 LargeBinary 등 특정 타입이 필요할 경우 검색해서 사용

 

model을 정의하였다면 db에 query를 할 명령문이 필요한데 repository라고 표현

clss MyDbRepo(base_repository.BaseRepo)
    def get_data(self, option1):
        session = self.get_session() # baserepo에 있는 메소드
        query = session.query(DataBaseModel)
        query = query.filter(DataBaseModel.created_dt > datetime('2023-03-13', '%Y-%m-%d'))
        
        return query.one() # 하나만 반환 all() 전부다 반환

23년 03월 13일 보다 이후 데이터를 하나 쿼리 없으면 오류 반환

first로 할 경우 없으면 None으로 반환

all일 경우 전부 반환 없으면 None

 

sqlalchemy는 비교적 간단하게 다룰 수 있지만 쿼리문이 복잡해 질 경우 사용에 제한이 있을 수 있음

 

'Python' 카테고리의 다른 글

Python Request  (0) 2024.05.23