ySQL 셸은 Python 모드에서 사용

12626 단어 Python3MySQLShell

Python 모드에서 MySQL Shell을 사용해 봤습니다.


갑골문 주최MySQL Technology Cafe #7에서 MySQL Shell의 Hanson 세미나가 열렸기 때문에 MySQL Shell을 사용해 보았습니다.

ySQL8.0.19 설치


2020년 1월 13일 공개되는 MySQL 8.0.19 활용
ySQL 8.0.19 커뮤니티 서버 및 MySQL 셸 다운로드 및 설치
https://dev.mysql.com/downloads/

OS X의 System Preference를 한 번에 닫고 다시 열지 않으면 버전 표시 등이 업데이트되지 않습니다.
SQL Shell에 다운로드한 pkg이 표시되지 않으므로 System Preference의 Security & Privacy 실행을 허용해야 합니다.

ySQL 셸은 플러그인을 통해 확장 가능


ySQL 셸은 플러그인으로 확장할 수 있기 때문에githubpull에서 실제 플러그인을 호출하는 한스톤
플러그인 확장을 만들 때
Fré déric Descamps 님의 GitHub을 참고하시면 좋을 것 같습니다.
https://github.com/lefred/mysqlshell-plugins
플러그인 파일의 기본 저장 위치~/.mysqlsh/plugins스토리지 목적지를 변경하려면 환경 변수로 지정MYSQLSH_USER_CONFIG_HOME플러그인 디렉터리에 초기화 스크립트가 포함되어야 합니다init.js, init.py 등 초기화 스크립트는 플러그인 파일의 저장처에 설치해야 한다

Python을 사용하여 플러그인을 만들 때 주의사항

  • PEP8 준수
  • 플러그인 디렉터리에 하위 디렉터리를 설정할 수 있기 때문에 플러그인의 모든 기능에 따라 하위 디렉터리에 플러그인을 합칠 수 있다
    ySQL Shell 설명서는 아래 링크에서 참조할 수 있습니다.
    https://dev.mysql.com/doc/mysql-shell/8.0/en/

    Python in MySQL Shell


    여기서부터 한스톤의 내용을 정리하고 의문점의 노트를 확인한다
    우선 플러그인 파일의 저장 목적지 제작
    $ mkdir -p ~/.mysqlsh/plugins
    
    다음 MySQL Shell 확인
    python 모드로 시작
    $ mysqlsh --py
    MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
    
    환경의 Python 버전 및 미리 정의된 객체 보기
    아래MySQL Py > 섹션 힌트
     MySQL  Py > import sys 
     MySQL  Py > sys.version
    3.7.4 (default, Nov 26 2019, 05:13:11) 
    [Clang 11.0.0 (clang-1100.0.33.8)]
     MySQL  Py > [ item for item in dir() if not item.startswith('__')]
    [
        "db", 
        "dba", 
        "mysql", 
        "mysqlx", 
        "raw_input", 
        "session", 
        "shell", 
        "sys", 
        "util"
    ]
    
    경로 주위 확인, MySQL Shell 일시 종료
     MySQL  Py > [item for item in sys.path]
    [
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/PyNaCl-1.3.0-py3.7-macosx-10.14-x86_64.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/six-1.13.0-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/cffi-1.13.2-py3.7-macosx-10.14-x86_64.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/pyasn1-0.4.8-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/cryptography-2.8-py3.7-macosx-10.14-x86_64.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/python_dateutil-2.8.1-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/pyOpenSSL-19.1.0-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/bcrypt-3.1.7-py3.7-macosx-10.14-x86_64.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/certifi-2019.11.28-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/paramiko-2.4.2-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/pytz-2019.3-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk/configparser-3.5.0-py3.7.egg", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/share/mysqlsh/oci_sdk", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/lib/mysqlsh/lib/python37.zip", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/lib/mysqlsh/lib/python3.7", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/lib/mysqlsh/lib/python3.7/lib-dynload", 
        "/usr/local/mysql-shell-8.0.19-macos10.15-x86-64bit/lib/mysqlsh/lib/python3.7/site-packages"
    ]
     MySQL  Py > exit()
    
    상황을 조금 알아봤습니다.

    init.무슨 일이 일어날지


    init.py가 없을 때


    이를 확인하기 위해 빈 ~/.mysqlsh/plugins/ext 디렉터리를 만들고 MySQL Shell을 시작합니다.
    $ mkdir -p ~/.mysqlsh/plugins 
    $ mkdir -p ~/.mysqlsh/plugins/ext
    $ mysqlsh --py
    MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
     MySQL  Py > exit()
    
    별거 아니에요.

    하위 디렉터리에서 init.py가 있을 때


    제작~/.mysqlsh/plugins/ext/init.py 및 MySQL Shell 시작
    $ echo "print('I\'m ~/.mysqlsh/plugins/ext/init.py')" > ~/.mysqlsh/plugins/ext/init.py
    $ mysqlsh --py
     MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
    I'm ~/.mysqlsh/plugins/ext/init.py
     MySQL  Py > exit()
    
    ySQL Shell 시작 시 실행~/.mysqlsh/plugins/ext/init.py

    하위 디렉터리에서 init.py, 그리고 하위 디렉터리에 init.py가 있을 때

    ~/.mysqlsh/plugins/ext/test 디렉터리 만들기, 배치init.py MySQL Shell 시작
    $ mkdir -p ~/.mysqlsh/plugins/ext/test
    $ echo "print('I\'m ~/.mysqlsh/plugins/ext/test/init.py')" > ~/.mysqlsh/plugins/ext/test/init.py
    $ mysqlsh --py 
    MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
    I'm ~/.mysqlsh/plugins/ext/init.py
     MySQL  Py > exit()
    
    이 경우 실행되지 않음~/.mysqlsh/plugins/ext/test/init.py

    하위 디렉터리에서 init.py가 없고, 하위 디렉터리에 init가 있습니다.py가 있을 때


    삭제~/.mysqlsh/plugins/ext/init.py 및 MySQL 셸 시작
    $ rm ~/.mysqlsh/plugins/ext/init.py
    $ mysqlsh --py --log-level=debug
    MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
    I'm ~/.mysqlsh/plugins/ext/test/init.py
     MySQL  Py > exit()
    
    실행 확인 가능~/.mysqlsh/plugins/ext/test/init.py문서 6.3.2 플러그인 그룹 만들기 설명
    If a subdirectory of the plugins folder does not contain an initialization script (an init.js or init.py file), MySQL Shell treats it as a plugin group and searches its subfolders for the initialization scripts for the plugins. The containing folder can contain other files with code that is shared by the plugins in the plugin group.
    플러그인 디렉터리에 init.py 또는 init.js가 없는 상황에서plugin 그룹으로 처리되며, 하위 디렉터리에 있는 init입니다.py 등 초기화 스크립트 검색
    즉, 상위 디렉터리에 init.py 이 있으면 하위 디렉터리의 init.py 를 실행하지 않는다는 것이다

    init。py가 있을 때


    그렇다면 ~/.mysqlsh/plugins/ 아래 직접 설정init.py에서는 어떤 일이 일어날까요?
    $ echo "print('I\'m ~/.mysqlsh/plugins/init.py')" > ~/.mysqlsh/plugins/init.py
    $ mysqlsh --py 
    MySQL Shell 8.0.19
    
    Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
    Other names may be trademarks of their respective owners.
    
    Type '\help' or '\?' for help; '\quit' to exit.
    I'm ~/.mysqlsh/plugins/ext/test/init.py
     MySQL  Py > exit()
    
    아무런 변화도 없다
    즉, ~/.mysqlsh/plugins/ 에서 구성 init.py 해도 실행되지 않으며, 하위 디렉토리 검색 및 실행 init.py

    init.py 배치 장소 주의


    위에서 볼 수 있듯이 init.py 방치장소는 주의해야 한다
  • ~/.mysqlsh/plugins에 배치된 init.py 실행 안 함, 하위 디렉토리 검색
  • ~/.mysqlsh/plugins 하위 디렉토리에 배치init.py 시 실행
  • ~/.mysqlsh/plugins 하위 디렉토리에 없는 경우 init.py 하위 디렉토리의 init.py 를 추가로 읽어들여 실행합니다.
  • init.py를 찾으면 해당 디렉토리의 하위 디렉토리 init.py
  • 를 무시합니다.
    이번에는 여기까지

    좋은 웹페이지 즐겨찾기