Ответ 1
Вам придется выкопать точный синтаксис, но для MySQL я думаю, что они используют запрос unix_socket
opt. Что-то вроде:
mysql:///dbname?unix_socket=/opt/mysql/mysql.sock'
Должен быть ваш URI соединения для SQLAlchemy.
Местоположение mysql.sock в моей системе /usr/local/mysql5/mysqld.sock
thrilllap-2:tmp reuven$ mysqld --print-defaults
mysqld would have been started with the following arguments:
--socket=/usr/local/mysql5/mysqld.sock --port=3306
Когда я пытаюсь использовать mysql через sqlalchemy из флэка, я получаю:
File "build/bdist.macosx-10.6-intel/egg/MySQLdb/connections.py", line 187, in __init__
sqlalchemy.exc.OperationalError: (OperationalError) (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") None None
Программа mysql правильно подключается к базе данных, как и любой другой клиент mysql в моей системе.
My my.cnf имеет правильное расположение для сокета
[client]
port = 3306
socket = /usr/local/mysql5/mysqld.sock
[safe_mysqld]
socket = /usr/local/mysql5/mysqld.sock
[mysqld_safe]
socket = /usr/local/mysql5/mysqld.sock
[mysqld]
socket = /usr/local/mysql5/mysqld.sock
port = 3306
В базовой библиотеке "SQLAlchemy" есть опция, где вы можете указать местоположение mysql.sock, но это не отображается через библиотеку sqlalchemy/flask.
http://packages.python.org/Flask-SQLAlchemy/config.html
Мои вопросы:
Вам придется выкопать точный синтаксис, но для MySQL я думаю, что они используют запрос unix_socket
opt. Что-то вроде:
mysql:///dbname?unix_socket=/opt/mysql/mysql.sock'
Должен быть ваш URI соединения для SQLAlchemy.
Да! Шон был прав
app.config['SQLALCHEMY_DATABASE_URI'] = ''mysql://dayenu:[email protected]/dayenu?unix_socket=/usr/local/mysql5/mysqld.sock
db = SQLAlchemy(app)
отлично работает! Я думаю, что этот параметр используется pyodbc, что SQLAlchemy использует для общения с mysql, но я не мог найти этот параметр в любом месте документации pyodbc.
Вы можете создать conexión используя
sqlalchemy.create_engine(
mysql_str = sqlalchemy.engine.url.URL(
drivername='mysql+pymysql',
username="db_user",
password="db_pass",
database=db_name,
query={
'unix_socket': '/usr/local/mysql5/mysqld.sock'
}
)
)