4

Windowsでpython 2.7とdjango 1.5を使用して、DjangoをGoogleクラウドSQLに接続しようとしています。このページの手順を実行しました: https://developers.google.com/appengine/docs/python/cloud-sql/django

私の settings.py ファイルには、次の形式の基本的なデータベース設定があります。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'INSTANCE': 'my_project:instance1',
        'NAME': 'my_database',
    }
}

もちろん、適切な SQL インスタンスと、Google API コンソールの SQL プロンプトを介して作成されたデータベースを使用して

manage.py syncdbOAuth2 トークンを取得するために初めて実行しようとすると、次のようになります。

OperationalError: (2003、「'localhost' の MySQL サーバーに接続できません (10061)」)

質問する前に、django と google の両方のパッケージが PYTHONPATH にあり、「C:\Program Files (x86)\Google\google_appengine\lib\django-1.5」であることを確認しました。

どんな助けでも大歓迎です!

4

2 に答える 2

9

そのデータベース構成は、AppEngine から接続する場合にのみ意味があります。django を使用してローカル マシンから CloudSQL データベースにアクセスする場合は、google.appengine.ext.django.backends.rdbmsエンジンを使用する必要があります。

ここでさまざまな構成オプションを確認できます: https://developers.google.com/appengine/docs/python/cloud-sql/django#development-settings

編集:google.appengine.ext.django.backends.rdbmsエンジンは廃止されました。ローカル マシンから Google Cloud SQL に接続する場合は、IP 接続を使用する必要があります。django.db.backends.mysqlCloud SQL インスタンス IP(IPv4 または IPv6)を使用し、標準エンジンを使用して接続できます。

于 2013-09-30T20:56:37.313 に答える
6

Django での Google Cloud SQL への接続例:

AppEngine Standard, Python 2.7:

try:
    import MySQLdb  # noqa: F401
except ImportError:
    import pymysql
    pymysql.install_as_MySQLdb()

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/<your-cloudsql-connection-string>',
            'NAME': '<your-database-name>',
            'USER': '<your-database-user>',
            'PASSWORD': '<your-database-password>',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1', # DB's IP address
            'PORT': '3306',
            'NAME': '<your-database-name>',
            'USER': '<your-database-user>',
            'PASSWORD': '<your-database-password>',
        }
    }

出典: GCP Python Django サンプル AppEngine 標準 Python 2.7


AppEngine Standard, Python 3.7:

# Install PyMySQL as mysqlclient/MySQLdb to use Django's mysqlclient adapter
# See https://docs.djangoproject.com/en/2.1/ref/databases/#mysql-db-api-drivers
# for more information
import pymysql  # noqa: 402
pymysql.install_as_MySQLdb()

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1', # DB's IP address
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

ソースGCP Python Django サンプル AppEngine 標準 Python 3.7


AppEngine Flexible:

DATABASES = {
    'default': {
        # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
        # 'ENGINE': 'django.db.backends.mysql' instead of the following.
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'polls',
        'USER': '<your-database-user>',
        'PASSWORD': '<your-database-password>',
        # For MySQL, set 'PORT': '3306' instead of the following. Any Cloud
        # SQL Proxy instances running locally must also be set to tcp:3306.
        'PORT': '5432',
    }
}
# In the flexible environment, you connect to CloudSQL using a unix socket.
# Locally, you can use the CloudSQL proxy to proxy a localhost connection
# to the instance
DATABASES['default']['HOST'] = '/cloudsql/<your-cloudsql-connection-string>'
if os.getenv('GAE_INSTANCE'):
    pass
else:
    DATABASES['default']['HOST'] = '127.0.0.1' # DB's IP address

ソースGCP Python Django サンプル AppEngine フレキシブル

于 2019-02-14T17:37:12.810 に答える