我想使用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数据库(不一定是谷歌等)的其他建议也会很有用。
答案 0 :(得分:3)
/cloudsql/<projectid>:<instancename>
是一个特殊的套接字,仅在App Engine上运行时才存在。
要进行外部连接,您需要通过IP地址进行连接:
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>