【问题标题】:Error connecting Google AppEngine Django with SQL 2nd generation instance?将 Google AppEngine Django 与第二代 SQL 实例连接时出错?
【发布时间】:2019-11-01 22:32:32
【问题描述】:

我想将我的站点从第一代 Cloud SQL 实例迁移到第二代 Cloud SQL 实例,这是旧配置:

DATABASES['[DATABASE_NAME]'] = {
    'ENGINE': 'google.appengine.ext.django.backends.rdbms',
    'INSTANCE': '[PROJECT_ID]:[INSTANCE_ID_1stGEN]',
    'NAME': '[DATABASE_NAME]',
    'USER': [MY_USER],
    'PASSWORD': [MY_PASSWORD],
}

这很好,现在我正在尝试使用此代码:

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/[PROJECT_NAME]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

还有这段代码

DATABASES['[DATABASE_NAME]'] = {  # 2da gen no funciono error COUNT_ROWS
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

这是错误:

AttributeError at /
'module' object has no attribute 'FOUND_ROWS'
   /base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/third_party/django-1.5/django/db/backends/mysql/base.py in _cursor
            kwargs['client_flag'] = CLIENT.FOUND_ROWS 

我需要你的帮助。

Django 版本是 1.5 很老了


发现错误,ENGINE错误,我换成google.appengine.ext.django.backends.rdbms

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'HOST': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

但还是失败了,现在说需要一个 INSTANCE 密钥,然后我用 INSTANCE 替换 HOST:

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

...没什么...

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': MY_USER,
        'PASSWORD':MY_PASSWORD
}

尝试这个,现在又出现另一个错误:

InternalError at /
(0, u'Not authorized to access instance: [PROJECT_ID]:[REGION]:[INSTANCE_ID]')

/base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py in MakeRequest
      request.request_id = self._idempotent_request_id
      response = self._MakeRetriableRequest(stub_method, request)
    else:
      response = self.MakeRequestImpl(stub_method, request)
    if (hasattr(response, 'sql_exception') and
        response.HasField('sql_exception')):
      raise _ToDbApiException(response.sql_exception) ...
    return response
  def _MakeRetriableRequest(self, stub_method, request):
    """Makes a retriable request.

添加 SSL/TSL 配置:

DATABASES['[DATABASE_NAME]'] = {
            'ENGINE': 'google.appengine.ext.django.backends.rdbms',
            'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
            'NAME': '[DATABASE_NAME]',
            'USER': [MY_USER],
            'PASSWORD': [MY_PASSWORD],
            'OPTIONS': {'ssl': {
                'key': '/servidor/[INSTANCE_ID]/client-key.pem',
                'cert': '/servidor/[INSTANCE_ID]/client-cert.pem',
                'ca': '/servidor/[INSTANCE_ID]/client-ca.pem',
            }}

我仍然遇到同样的错误。

证书有效,使用 MySQL Workbench 没有问题。

【问题讨论】:

  • 我也用INSTANCE字段中的IP地址测试过,但是实例名无效
  • 环境是Standard App Engine,SQL是二代,我觉得连接不上,;-(

标签: django google-app-engine google-cloud-sql


【解决方案1】:

documentation 所述,rdbms 库将无法与升级的第二代 Cloud SQL 实例一起使用。为了将您的第二代 Cloud SQL 实例连接到您的 App Engine 标准应用程序,请确保您的服务帐户具有正确的权限并使用 Unix 域套接字。所有相关信息都可以在here找到。

【讨论】:

  • 谢谢,这正是我在第二次尝试中写的,使用 'django.db.backends.mysql' 但出现其他错误 AttributeError at / 'module' object has no attribute 'FOUND_ROWS' 存在其他ENGINE 我可以尝试什么?
  • 你基本上只需要关注这个section的文档。假设 Cloud SQL 实例(已连接 Cloud SQL Admin API)和 App Engine(服务帐户至少分配了 Cloud SQL Client 角色)设置正确,您基本上只需要导入sqlalchemy library 并使用@987654325 @ 使用 Unix 域套接字连接到您的实例。
猜你喜欢
  • 2016-04-28
  • 2017-02-22
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多