Google Cloud SQLのドキュメントとさまざまな検索を調べましたが、Google Cloud SQLでSQLAlchemyを使用できるかどうか、使用できる場合は接続URIを確認できません。
Flask-SQLAlchemy拡張機能を使用したいと考えており、次のような接続文字列が必要です。mysql://username:password@server/db
Djangoの例を見ましたが、構成が接続文字列とは異なるスタイルを使用しているようです。 https://developers.google.com/cloud-sql/docs/Django
Google Cloud SQLのドキュメント: https://developers.google.com/cloud-sql/docs/developers_guide_python
更新
Google Cloud SQLが直接アクセスをサポートするようになったため、MySQLdb
方言を使用できるようになりました。 mysqlダイアレクトを介した推奨接続は、URL形式を使用することです。
_mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
_
_mysql+gaerdbms
_ 非推奨 バージョン1.0以降のSQLAlchemy
他の人がまだ役立つと思う場合に備えて、以下の元の回答を残しておきます。
後でこの質問にアクセスする(そしてすべてのコメントを読みたくない)人のために、SQLAlchemyは接続文字列/方言を使用してバージョン0.7.8以降のGoogle Cloud SQLをサポートするようになりました(参照: docs )::
_mysql+gaerdbms:///<dbname>
_
例えば。:
_create_engine('mysql+gaerdbms:///mydb', connect_args={"instance":"myinstance"})
_
_mysql+gaerdmbs://
_方言に pdate を提案し、Google Cloud SQL API(_rdbms_apiproxy
_と_rdbms_googleapi
_)の両方をサポートして非-からCloudSQLに接続しますGoogle App Engineの本番インスタンス(開発ワークステーションなど)。この変更により、プロジェクトとインスタンスを文字列の一部として含めることで接続文字列もわずかに変更され、_connect_args
_を介して個別に渡す必要がなくなります。
例えば。
_mysql+gaerdbms:///<dbname>?instance=<project:instance>
_
これにより、明示的にcreate_engine()
呼び出しを行わないFlask-SQLAlchemyまたはその他の拡張機能でCloudSQLを簡単に使用できるようになります。
開発ワークステーションからGoogleCloud SQLに接続する際に問題が発生した場合は、こちらの回答をご覧ください https://stackoverflow.com/a/14287158/191902 。
はい、
SA + Cloud SQLにバグを見つけた場合は、お知らせください。 SQLAlchemyに統合された方言コードを書きました。 Cloud SQLがどのように例外をバブルアップするかについては少しばかげたビジネスがあるので、そこにはいくつかのルーズエンドがあるかもしれません。
Flaskをまったく使用していないので、それを介して接続を確立するかどうかはわかりませんが、実行可能です。Pyramidを介して機能させ、SQLAlchemyにパッチを送信しました(おそらく間違ったレポ)ここ:
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がさまざまな例外をスローすることにはいくつかの問題があるため、データベースを自動的にデプロイするなどの問題が発生しました。また、2番目のパッチで説明されているように、NullPoolを使用して接続プールを無効にする必要があります。
その後、NDBを介してデータストアを使用するようになりました。そのため、しばらくの間、これらの修正の進行状況を追跡していません。
MySQLdb (受け入れられた回答で提案されている)よりも PyMySQL を好む人のために、SQLAlchemy接続文字列は次のとおりです。
本番用
mysql+pymysql://<USER>:<PASSWORD>@/<DATABASE_NAME>?unix_socket=/cloudsql/<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
必ず
SQLインスタンスをapp.yaml
に追加します。
beta_settings:
cloud_sql_instances: <PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>
SQL管理APIを有効にします 必要と思われるため :
https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview
ローカル開発用
mysql+pymysql://<USER>:<PASSWORD>@localhost:3306/<DATABASE_NAME>
次のコマンドでCloudSQLプロキシを開始したとします。
cloud_sql_proxy -instances=<PUT-SQL-INSTANCE-CONNECTION-NAME-HERE>=tcp:3306