Python与Google SQL Cloud之间的接口问题

时间:2015-12-19 15:30:54

标签: python mysql sqlalchemy google-cloud-sql

我想使用SQLAlchemy在Python和Google SQL Cloud之间建立联系。我试图运行以下代码:

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环境中,我得到&#34;找不到图像&#34;。

我使用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时,它告诉我该模块不存在:

ImportError: No module named sqlalchemy

即使在该环境中conda list向我显示安装了sqlalchemy,也会发生这种情况。

对于这篇文章的广泛混乱,我感到非常抱歉。在我试过的每条路线上似乎都有扳手。我已经浏览了与此相关的StackOverflow上的每个帖子并尝试了所有建议,但似乎没有任何效果。任何帮助都将不胜感激。

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

1 个答案:

答案 0 :(得分:3)

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

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

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