기능 정의
기존에 만들어져 있는 DB에서 테이블들을 리플렉션하여 model 코드를 생성하게 해준다.
생성 방법
python library 설치
1 2
pip install sqlalchemy pip install sqlacodegen
아래와 같은 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)
작성된 파일 실행
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 추가파일 다시 실행
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 파일은 잘 생성된다.