Я унаследовал приложение, использующее python & sqlalchemy для взаимодействия с базой данных mysql. Когда я выдаю:create_engine проблемы mysql 5.7 и sqlalchemy
mysql_engine = sqlalchemy.create_engine('mysql://uname:[email protected]:3306/testdb', connect_args={'use_unicode':True,'charset':'utf8', 'init_command':'SET NAMES UTF8'}, poolclass=NullPool)
, при запуске, создается исключение:
cmd = unicode("USE testdb")
with mysql_engine.begin() as conn:
conn.execute(cmd)
sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.xx.xx' (101)") None None
Однако, используя IDLE я могу сделать:
>>> import MySQLdb
>>> Con = MySQLdb.Connect(host="192.168.xx.xx", port=3306, user="uname", passwd="pwd", db="testdb")
>>> Cursor = Con.cursor()
>>> sql = "USE testdb"
>>> Cursor.execute(sql)
приложение в этот момент по умолчанию к использованию встроенной базы данных sqlite. После этого я могу с радостью переключиться на базу данных MySQL, используя вышеприведенное заявление create_engine. Тем не менее, при перезагрузке соединение с базой данных MySQL снова завершится неудачей, по умолчанию для встроенного sqlite db и т. Д. И т. Д.
Есть ли у кого-нибудь какие-либо предложения относительно того, как это может произойти?
Просто подумал, что я обновил бы это - проблема все еще происходит точно так, как описано выше. Я обновил приложение, чтобы пользователь мог вручную подключиться к MySQL db, выбрав опцию меню. Это вызывает идентичный код, исключения которого при запуске приложения, но отлично работает, когда приложение запущено и работает.
Экземпляр MySQL полностью отделен от приложения и работает повсюду, поэтому он должен быть доступен для приема соединений в любое время.
Я думаю, что основной вопрос, с которым я сталкиваюсь, заключается в том, как может работать тот же самый код соединения, когда приложение запущено и работает, но генерирует исключение при его запуске?
Есть ли артефакт SQLAlchemy, который может привести к сбою в создании полезных подключений, которые не зависят от параметров подключения или удаленной базы данных?
Что вы имеете в виду Python умирает? Исключение? Segfault? Нет выхода? – univerio
@univerio - извините, я действительно не предоставил достаточную информацию там - исключение поднято, я добавил несколько подробностей ... – RadioRaheem