Posts SQLAlcheme model 자동생성 방법
Post
Cancel

SQLAlcheme model 자동생성 방법

기능 정의

기존에 만들어져 있는 DB에서 테이블들을 리플렉션하여 model 코드를 생성하게 해준다.

생성 방법

  1. python library 설치

    1
    2
    
     pip install sqlalchemy
     pip install sqlacodegen
    
  2. 아래와 같은 python coding을 한 후, 실행한다. 여기에서 파일명은 test.py라고 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     from sqlalchemy.engine import create_engine
     from sqlalchemy.schema import MetaData
    
     from sqlacodegen.codegen import CodeGenerator
    
     url = "mysql+pymysql://{계정}:{비밀번호}@{IP}:{Port}/{DB명}"
     engine = create_engine(url)
     metadata = MetaData(engine)
     metadata.reflect(engine)
    
     with open('models.py', 'w', encoding='utf-8') as outfile:
         generator = CodeGenerator(metadata)
         generator.render(outfile)
    
  3. 작성된 파일 실행

    1
    2
    3
    4
    5
    6
    7
    
     PS C:\Projects\SCore\workspace\privates\oslo-cache-sample> & c:/Projects/SCore/workspace/privates/oslo-cache-sample/.venv/Scripts/python.exe c:/Projects/SCore/workspace/privates/oslo-cache-sample/test.py
     Traceback (most recent call last):
     File "c:\Projects\SCore\workspace\privates\oslo-cache-sample\test.py", line 4, in <module>
         from sqlacodegen.codegen import CodeGenerator
     File "C:\Projects\SCore\workspace\privates\oslo-cache-sample\.venv\Lib\site-packages\sqlacodegen\codegen.py", line 9, in <module>
         from inspect import ArgSpec
     spect.py)
    

    위와 같이 error가 발생하고, models.py가 생성되지 않는다. 현재 검색결과 python 3.11에서는 ArgSpec이 없어졌다고…
    /site-packages/sqlacodegen/codegen.py 파일을 열어서 직접 수정해야 한다.
    9라인에서 from inspect import ArgSpec 삭제
    485~488 라인 삭제 후, return False 추가

  4. 파일 다시 실행

    1
    2
    3
    4
    
     PS C:\Projects\SCore\workspace\privates\oslo-cache-sample> & c:/Projects/SCore/workspace/privates/oslo-cache-sample/.venv/Scripts/python.exe c:/Projects/SCore/workspace/privates/oslo-cache-sample/test.py
     c:\Projects\SCore\workspace\privates\oslo-cache-sample\test.py:8: RemovedIn20Warning: Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0. To prevent incompatible upgrades prior to updating applications, ensure requirements files are pinned to "sqlalchemy<2.0". Set environment variable SQLALCHEMY_WARN_20=1 to show all deprecation warnings.  Set environment variable SQLALCHEMY_SILENCE_UBER_WARNING=1 to silence this message. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
     metadata = MetaData(engine)
     PS C:\Projects\SCore\workspace\privates\oslo-cache-sample> 
    

    Deprecated와 관련된 warning이 표시되지만, 원하던 models.py 파일은 잘 생성된다.

This post is licensed under CC BY 4.0 by the author.