2015-12-19 1 views
2

Я хотел бы взаимодействовать между Python и Google SQL Cloud с помощью SQLAlchemy. Я попытался запустить следующий код:Проблемы взаимодействия Python с облаком Google SQL

from sqlalchemy import * 

engine = create_engine("mysql+mysqldb://[email protected]/<database>?unix_socket=/cloudsql/<projectid>:<instancename>") 

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

create_engine является метод SQLAlchemy и df является dataframe панды. Я использую Mac OS 10.11.1 (El Capitan), а версия MySQL - 5.7.10 для OS X 10.9.

Проблема 1. В среде Python 3.4 я получаю «изображение не найдено».

Я использую среду Python 3.4 и устанавливаю следующий пакет MySQLdb, предназначенный для поддержки Python 3: 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, с пип установить питон-MySQL вместо пакета MySQLDb выше, я получаю сообщение об ошибке:

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

Я уже предпринял необходимые шаги для авторизации своего IP-адреса и доступа к базе данных облака Google через клиент SQL в моей командной строке, поэтому не знаю, почему я это получаю?

Боковая проблема: По некоторым причинам, я не могу импортировать SQLAlchemy в консоли Notebook IPython при работе в Python 2.7 среды

На другой ноте я имею странную проблему посредством чего я могу импортировать SQLAlchemy в среда Python 2.7 из командной строки, но не из ноутбука iPython, запущена в той же среде. Когда я пытаюсь импортировать SQLAlchemy, используя ноутбук, он говорит мне, что модуль не существует:

ImportError: No module named sqlalchemy 

Это происходит, даже если conda list в этой среде показывает мне установлено, что SQLAlchemy.

Я ужасно сожалею об экспансивной беспорядке этого сообщения. Кажется, что на каждом пути, который я пробовал, есть гаечный ключ. Я прошел через каждое сообщение в StackOverflow, связанное с этим, и пробовал все предложения, но ничего не работает. Любая помощь вообще будет оценена по достоинству.

Если это слишком проблематично, другие предложения о том, как я могу загружать свои данные через Python в облачную базу данных SQL (не обязательно быть google), также будут полезны.

ответ

3

/cloudsql/<projectid>:<instancename> - специальный разъем, который будет существовать только при работе в App Engine.

Для подключения внешних, вам нужно будет подключить по IP-адресу:

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

+0

Что будет порт здесь? У меня есть только IP-адрес экземпляра. – runawaykid

+1

По умолчанию mysql-порт равен 3306, но вы можете оставить его без указания mysql + mysqldb: // : @/ ' – Vadim

+0

Большое спасибо, что решает вторую проблему. – runawaykid