我想使用 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/