복붙노트

[PYTHON] SQLAlchemy를 Google Cloud SQL과 함께 사용할 수 있습니까?

PYTHON

SQLAlchemy를 Google Cloud SQL과 함께 사용할 수 있습니까?

Google Cloud SQL의 문서 및 다양한 검색을 살펴 보았지만 SQLAlchemy를 Google Cloud SQL과 함께 사용할 수 있는지 여부와 그럴 경우 연결 URI가 무엇인지 알아낼 수 없습니다.

Flask-SQLAlchemy 확장을 사용하고 다음과 같은 연결 문자열이 필요합니다. mysql : // 사용자 이름 : password @ server / db

장고 예제를 보았지만 구성에서 연결 문자열과 다른 스타일을 사용하는 것으로 보입니다. https://developers.google.com/cloud-sql/docs/django

Google Cloud SQL 문서 : https://developers.google.com/cloud-sql/docs/developers_guide_python

해결법

  1. ==============================

    1.최신 정보

    최신 정보

    Google Cloud SQL은 이제 직접 액세스를 지원하므로 MySQLdb 언어를 사용할 수 있습니다. mysql dialect를 통한 권장 연결은 URL 형식을 사용합니다.

    mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
    

    mysql + gaerdbms는 버전 1.0 이후 SQLAlchemy에서 더 이상 사용되지 않습니다.

    다른 사람들이 여전히 도움이 될 경우에 대비하여 나는 원래의 대답을 남겨두고 있습니다.

    이 질문을 나중에 (그리고 모든 코멘트를 읽고 싶지는 않은) 사람들에게 SQLAlchemy는 연결 문자열 / dialect (docs 참조)를 사용하여 0.7.8 버전에서 Google Cloud SQL을 지원합니다.

    mysql+gaerdbms:///<dbname>
    

    예 :

    create_engine('mysql+gaerdbms:///mydb', connect_args={"instance":"myinstance"})
    

    Google 이외의 App Engine 프로덕션 인스턴스 (예 : 개발 워크 스테이션)에서 Cloud SQL에 연결하기위한 두 가지 Google Cloud SQL API (rdbms_apiproxy 및 rdbms_googleapi)를 지원하는 mysql + gaerdmbs : // dialect에 대한 업데이트를 제안했습니다. 변경 사항은 또한 문자열의 일부로 프로젝트 및 인스턴스를 포함하여 연결 문자열을 약간 수정하며 connect_args를 통해 별도로 전달할 필요가 없습니다.

    mysql+gaerdbms:///<dbname>?instance=<project:instance>
    

    이것은 또한 Cloud SQL을 Flask-SQLAlchemy 또는 create_engine () 호출을 명시 적으로 작성하지 않는 다른 확장과 함께 사용하는 것을 더 쉽게 만듭니다.

    개발 워크 스테이션에서 Google Cloud SQL에 연결하는 데 문제가있는 경우 https://stackoverflow.com/a/14287158/191902에서 내 대답을 살펴볼 수 있습니다.

  2. ==============================

    2.예,

    예,

    SA + Cloud SQL에서 버그를 발견하면 알려주십시오. SQLAlchemy에 통합 된 사투리 코드를 작성했습니다. 클라우드 SQL이 예외를 버리는 방법에 대해 약간 바보 같은 사업이 있기 때문에 거기에 약간의 단점이있을 수 있습니다.

  3. ==============================

    3.비록 내가 플라스크를 전혀 사용하지 않았음에도 불구하고 그것을 통해 연결을 설정하는 것에 대해 확신 할 수는 없지만 실행 가능합니다. 필자는 Pyramid를 통해 작업을하고 SQLAlchemy에 패치를 제출했습니다 (아마도 잘못된 repo에).

    비록 내가 플라스크를 전혀 사용하지 않았음에도 불구하고 그것을 통해 연결을 설정하는 것에 대해 확신 할 수는 없지만 실행 가능합니다. 필자는 Pyramid를 통해 작업을하고 SQLAlchemy에 패치를 제출했습니다 (아마도 잘못된 repo에).

    https://bitbucket.org/sqlalchemy/sqlalchemy/pull-request/2/added-a-dialect-for-google-app-engines

    그 이후로 대체되었고 SQLAlchemy로 받아 들여졌습니다.

    http://www.sqlalchemy.org/trac/ticket/2484

    나는 그것이 릴리스에가는 길을 만들었다 고 생각하지 않는다.

    Google SQL에서 여러 가지 예외가 발생하여 데이터베이스를 자동으로 배포하는 것과 같은 문제가 발생했습니다. 또한 두 번째 패치에서 언급 한 NullPool을 사용하여 연결 풀링을 비활성화해야합니다.

    이후 NDB를 통해 데이터 저장소를 사용하기로 이동 했으므로 잠시 동안 이러한 수정 프로그램의 진행 상황을 따라 가지 않았습니다.

  4. ==============================

    4.MySQLdb보다 PyMySQL을 선호하는 사람들 (받아 들인 답에서 제안되는)의 경우 SQLAlchemy 연결 문자열은 다음과 같습니다.

    MySQLdb보다 PyMySQL을 선호하는 사람들 (받아 들인 답에서 제안되는)의 경우 SQLAlchemy 연결 문자열은 다음과 같습니다.

    생산 용

    mysql + pymysql : // : @ / ? unix_socket = / cloudsql /

    반드시 확인하십시오.

    지역 개발

    mysql + pymysql : // : @localhost : 3306 /

    클라우드 SQL 프록시를 시작했다고 가정하면 다음과 같습니다.

    cloud_sql_proxy -instances = = tcp : 3306

  5. from https://stackoverflow.com/questions/10763171/can-sqlalchemy-be-used-with-google-cloud-sql by cc-by-sa and MIT license