为什么manage.pysyncdb无法连接到google云sql数据库?

2023-11-29

在最近更新 Google App Engine 上的应用程序期间,我正在使用以下内容更新数据库:

SETTINGS_MODE='prod' ./manage.py syncdb

我上次运行它时有效,但现在我收到以下错误:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/c/clients/green_rentals/code/green-rental/south/management/commands/syncdb.py", line 92, in handle_noargs
    syncdb.Command().execute(**options)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/Library/Python/2.7/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 159, in cursor
    cursor = util.CursorWrapper(self._cursor(), self)
  File "/c/downloads/python/google_appengine/google/storage/speckle/python/django/backend/base.py", line 263, in _cursor
    if not self._valid_connection():
  File "/c/downloads/python/google_appengine/google/storage/speckle/python/django/backend/base.py", line 258, in _valid_connection
    return super(DatabaseWrapper, self)._valid_connection()
AttributeError: 'super' object has no attribute '_valid_connection'

我尝试将 Google App Engine SDK 更新到最新版本(1.8.8),并且还尝试使用 oauth 重新进行身份验证(有效)。但仍然收到相同的消息。有什么线索可以解释为什么吗?

提前致谢!

Edit:

看来我用于数据库连接的设置最近已更改。我以前用过:

DATABASES = {
    'default': {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': 'project-id:instance-id',
        'NAME': 'name',
    }
}

但现在的建议是:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/your-project-id:your-instance-name',
        'NAME': 'database-name',
        'USER': 'mysql-user',
    }
}

更新后,我现在收到一个新错误:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/c/clients/green_rentals/code/green-rental/south/management/commands/syncdb.py", line 89, in handle_noargs
    db.connection_init() 
  File "/c/clients/green_rentals/code/green-rental/south/db/mysql.py", line 180, in connection_init
    cursor = self._get_connection().cursor()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 159, in cursor
    cursor = util.CursorWrapper(self._cursor(), self)
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 129, in _cursor
    self.ensure_connection()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 124, in ensure_connection
    self.connect()
  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 99, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 124, in ensure_connection
    self.connect()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 112, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 435, in get_new_connection
    conn = Database.connect(**conn_params)
  File "/Library/Python/2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/cloudsql/your-project-id:your-instance-name' (2)")

(其中 your-project-id:your-instance-name 已适当更改)。


Intro

我将在这里为那些也被此问题绊倒的人留下更详细的答案,我意识到另一个已经被接受,但希望这会对某人有所帮助。在撰写本文时,我们使用的是 Django 1.6。

基本上可以归结为:Django CloudSQL 文档目前,Google App Engine 的过时的。他们利用 OAuth2 连接机制,这种机制充其量是笨重的,如果你使用的是syncdb来自无头 Vagrant/虚拟机内部的管理命令,因为它要求您有一个支持 Javascript 的浏览器来实际检索令牌(除非您使用gflags库的全局状态,但这是另一天的故事),这显然在命令行上相当麻烦(我相信只有 elinks 有 CLI JS 支持,而 Ubuntu 存储库版本不包括 js 支持..)

在 Google App Engine Web 控制台中进行设置

如果你去这个link您将找到有关连接实例的新方法的说明。这可以通过在 Web 控制台中进行一些点击来实现:

  1. 将公共 IP 分配给 Cloud SQL 实例(如果有帮助的话,可以将其视为 AWS 弹性 IP)。
  2. 允许您的本地 IP 地址/范围访问 Cloud SQL 实例。

更正您的 Django 设置

对于生产实例在 App Engine 上运行 itself:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/project-name:instance-name',
        'NAME': 'name_of_pre_created_database',
        'USER': 'root_or_pre_created_user',
    }
}

对于开发实例连接到生产 Cloud SQL 实例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '198.198.88.88', 
        'NAME': 'name_of_pre_created_database',
        'USER': 'root_or_pre_created_user',
        'PASSWORD': 'password_of_pre_created_or_root_user',
    }
}

其中 198.198.88.88 是 Google 在您请求后自动分配给您的 Cloud SQL 实例的 IP 地址(见上文)。请记住,您需要从允许访问该特定 Cloud SQL 实例的 IP 进行连接。

有了这个,google.appengine.ext.django.backends.rdbms可以咬住灰尘(松一口气)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么manage.pysyncdb无法连接到google云sql数据库? 的相关文章

随机推荐

  • 调用 C# COM 对象

    好的 我创建了一个 c dll 将其所有接口和方法全部设为 ComVisible true 使用 gacutil 将其添加到 GAC 然后使用 regasm 注册它并创建类型库 tlb 文件 现在我有另一个 c 项目 我想调用该 com 对
  • 如何从 Power Query 中的上一行获取列值?

    我想从前一行获取一个值 我按照中的建议尝试了以下代码这个帖子 Table AddColumn Added index custom column each Index 1 column name 但它会抛出这个错误 Cannot use f
  • Python:使用 webbrowser-control 更改网络浏览器的 url

    好的 我知道如果你想使用 python 打开特定的 url 你可以运行 import webbrowser webbrowser open buinvent com 但是 如果您想在 Web 浏览器中将其更改为不同的 url 而不在 Web
  • 在我的班级中实现 Thread Android?

    我想知道如何在此类中实现线程以使其免受ANR 应用程序无响应 问题的影响 public class myClass private static String LOG TAG Root class getName public boolea
  • 奇怪的 JavaScript 习惯用法 - “/xyz/.test(function(){xyz;})” 是做什么的?

    John Resig 写了一个漂亮的类函数 时髦 我试图弄清楚发生了什么事 并且几乎所有事情都弄清楚了 除了一行 fnTest xyz test function xyz b super b 有几件事立即跳入我的脑海 首先xyz从未被初始化
  • 转换后的图像不清楚。 .wmf 转 png

    我正在尝试使用 c net 将 wmf 图像文件转换为 png 格式 但是 保存的图像不清楚 my code Metafile img new Metafile test wmf MetafileHeader header img GetM
  • VueJS从父组件访问子组件的数据

    我正在使用webpack 的 vue cli 脚手架 我的 Vue 组件结构 层次结构当前如下所示 App PDF Template 背景 动态模板图像 静态模板图像 Markdown 在应用程序级别 我想要一个 vuejs 组件方法 可以
  • 在Python中按(n个)块迭代迭代器?

    你能想出一种好方法 也许使用 itertools 将迭代器分割成给定大小的块吗 所以l 1 2 3 4 5 6 7 with chunks l 3 成为迭代器 1 2 3 4 5 6 7 我可以想到一个小程序来做到这一点 但也许不是 ite
  • Lein Clojure 1.3 与 Clojure 1.2.1

    我承认这个问题的措辞有点糟糕 请让我知道我应该运行哪些命令来提供更多信息 我会提供它 背景 我使用 Clojure 已有约 1 年了 主要只是通过clojure repl 现在 我开始使用 Lein 然而 leon 不喜欢我的一些代码 这是
  • 如何使用php检索特定文件夹中的所有文件名

    比如说 在我的网络服务器中有一个名为 upload files 的文件夹 然后我的 php 页面之一应该获取该文件夹中的所有文件名 我已经用谷歌搜索过 但到目前为止返回的文件名只是用户浏览的页面 谢谢 有很多方法可以检索文件夹内容 例如gl
  • CodeIgniter - 使用一个输入上传多个文件

    我正在尝试上传几个文件立即从1个输入
  • 如何创建一个无论字符序列如何都匹配的正则表达式?

    假设我要求用户输入所提供的某些单词 他 只会将其输入到将被验证的文本框中不管我已经寻找答案几个小时了 但我被困住了 例如应输入的单词是 foo bar green 即使订单是 我仍然可以匹配它绿富酒吧 or 绿色Foo酒吧 我非常了解正则表
  • 如何在 EF Core 2.1.0 中设置管理员用户?

    我有一个使用 EF Core 2 1 0 的 ASP NET Core 2 1 0 应用程序 如何使用管理员用户播种数据库并赋予他 她管理员角色 我找不到任何关于此的文档 As user cannot be seeded in a norm
  • Android - ListView:复选框未保持选中状态

    我有一个列表视图 大约有 200 个项目 我为复选框实现了一个自定义 ArrayAdapter 我使用 SparseBooleanArray 来存储框的值 所有这些工作正常 但我似乎无法以图形方式更新复选框的检查 如果用户单击 则该框被选中
  • 链接两个 D3 图

    我正在尝试链接两个 D3 图 以便选择右侧直方图的一部分 导致某个散点图显示在左侧 This是我的尝试 我当前的问题是为什么正确的图没有渲染 我认为这可以追溯到如何在 d3 中创建和引用多个 SVG 标签 D3 有针对这种情况的 SVG 控
  • 使用包将 Python 类拆分为多个模块

    我在 python 中编写了一些代码作为一个类 但现在我正在尝试将其作为包分发 但我在弄清楚不同的部分应该如何组合在一起时遇到了一些麻烦 因此 当我最初编写代码时 我有一个包含一些函数的类 其中包括 init 功能 我现在已将每个函数拆分为
  • 从 XSLT 2 中元素值的语义层次结构创建父子元素

    我在 XML 内容中有一系列 P 标记 它们在其初始值内具有语义层次结构 但是 P 标记是线性的 寻找 XSLT 2 转换 语义层次如下 1 a I A 正则表达式序列如下
  • 何时使用 PerThreadLifetimeManager?

    我按照下面链接的示例来设置 Unity 以与我的服务层一起使用 我的项目的设置与本文中的项目非常相似 我了解一切 除了到底为什么PerThreadLifetimeManager注册服务依赖项时使用 请记住 我还使用了也在我的服务层中使用的通
  • Python 目录中的最新文件

    我正在编写一个脚本 试图列出以 xls 结尾的最新文件 这应该很容易 但我收到了一些错误 Code for file in os listdir E Downloads if file endswith xls print file new
  • 为什么manage.pysyncdb无法连接到google云sql数据库?

    在最近更新 Google App Engine 上的应用程序期间 我正在使用以下内容更新数据库 SETTINGS MODE prod manage py syncdb 我上次运行它时有效 但现在我收到以下错误 Traceback most