python - Python 和 Google SQL Cloud 之间的接口(interface)问题

标签 python mysql sqlalchemy google-cloud-sql

我想使用 SQLAlchemy 在 Python 和 Google SQL Cloud 之间建立接口(interface)。我尝试运行以下代码:

from sqlalchemy import *

engine = create_engine("mysql+mysqldb://root@/<database>?unix_socket=/cloudsql/<projectid>:<instancename>")

df.to_sql('jobsbank', engine, flavor='mysql', if_exists='append',index=True)

create_engine 是一个 SQLAlchemy 方法,df 是一个 Pandas 数据帧。 我使用的是 Mac OS 10.11.1 (El Capitan),OS X 10.9 的 MySQL 版本是 5.7.10。

问题 1:在 Python 3.4 环境中,我收到“找不到图像”。

我使用Python 3.4环境,并安装以下旨在支持Python 3的MySQLdb包:https://github.com/PyMySQL/mysqlclient-python/

但是,当我运行脚本时,它会抛出以下错误:

ImportError                               Traceback (most recent call last)
<ipython-input-7-dd22983d5391> in <module>()
----> 1 import MySQLdb

/Users/---/anaconda/envs/scrape/lib/python3.4/site-packages/mysqlclient-1.3.7-py3.4-macosx-10.5-x86_64.egg/MySQLdb/__init__.py in <module>()
     17 from MySQLdb.release import __version__, version_info, __author__
     18 
---> 19 import _mysql
     20 
     21 if version_info != _mysql.version_info:

ImportError: dlopen(/Users/---/anaconda/envs/scrape/lib/python3.4/site-packages/mysqlclient-1.3.7-py3.4-macosx-10.5-x86_64.egg/_mysql.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
  Referenced from: /Users/---/anaconda/envs/scrape/lib/python3.4/site-packages/mysqlclient-1.3.7-py3.4-macosx-10.5-x86_64.egg/_mysql.so
  Reason: image not found

问题 2:在 Python 2.7 中,我收到错误无法通过套接字连接到本地 MySQL 服务器...

当我在 Python 2.7 环境中尝试相同的代码时,使用 pip install python-mysql 而不是上面的 MySQLdb 包,我收到错误消息:

sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2002, "Can't connect to local MySQL server through socket '/cloudsql/myprojectid:myinstancename' (2)")

我已经采取了必要的步骤来授权我的 IP 地址,并且可以通过命令行上的 SQL 客户端访问 google 云数据库,所以不确定为什么会收到此消息?

附带问题:由于某种原因,在 Python 2.7 环境中工作时,我无法在 iPython Notebook 控制台中导入 SQLalchemy

另一方面,我遇到了一个奇怪的问题,我可以从命令行在 Python 2.7 环境中导入 SQLAlchemy,但不能从在同一环境中启动的 iPython 笔记本导入 SQLAlchemy。当我尝试使用笔记本导入 sqlalchemy 时,它告诉我该模块不存在:

ImportError: No module named sqlalchemy

即使该环境中的 conda list 显示 sqlalchemy 已安装,也会发生这种情况。

我对这篇文章的困惑程度深感抱歉。我尝试过的每条路线似乎都有一把 Spanner 。我已经浏览了 StackOverflow 上与此相关的所有帖子,并尝试了所有建议,但似乎没有任何效果。任何帮助将不胜感激。

如果这太有问题,关于如何通过 Python 将数据上传到云 SQL 数据库(不一定是 google 的)的其他建议也将很有用。

最佳答案

/cloudsql/<projectid>:<instancename>是一个特殊的套接字,仅在 App Engine 上运行时才会存在。

要进行外部连接,您需要通过 IP 地址进行连接:

mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

关于python - Python 和 Google SQL Cloud 之间的接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372362/

相关文章:

python - "segmentation fault (core dumped)",当尝试从终端运行 Tensorboard 时

mysql - 调用存储过程,其中 'IN' 变量之一是来自 Express API 的列表

mysql - 警告 [LocalManagedConnectionFactory :cleanup] Lock owned during cleanup:

python - 长时间运行的进程中的 SQLAlchemy session 管理

python - 我可以在 Flask-SQLAlchemy 中使用数组枚举列吗?

python - Python 的 SQLAlchemy 是否支持服务器端游标(对于 MSSQL)?

python - Python中IF语句的评估

python - 如何创建隐藏工厂?

python - 麻雀 : TypeError: an integer is required (got type str)

php - 如何为大型 MySQL 表轻松配置 Hadoop