Можно ли использовать Mysql с SqlAlchemy и Flask, если мой сокет mysql не находится в / tmp? - PullRequest
15 голосов
/ 06 июня 2011

Расположение для 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 из фляги, яget:

  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.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

Мои вопросы:

  1. Откуда sqlalchemy приходит к выводу, что /tmp/mysql.sock является правильным местоположением?
  2. Есть ли способ изменить значение по умолчанию черезFlash-SQLAlchemy разъем

Ответы [ 3 ]

25 голосов
/ 06 июня 2011

Вам придется выкопать точный синтаксис, но для MySQL я думаю, что они используют опцию unix_socket запроса. Что-то вроде:

mysql:///dbname?unix_socket=/opt/mysql/mysql.sock'

Должен быть вашим URI подключения для SQLAlchemy.

13 голосов
/ 06 июня 2011

Да! Шон был прав

app.config['SQLALCHEMY_DATABASE_URI'] = ''mysql://dayenu:secret.word@localhost/dayenu?unix_socket=/usr/local/mysql5/mysqld.sock
db = SQLAlchemy(app)

отлично работает! Я думаю, что этот параметр используется pyodbc, который SQLAlchemy использует для общения с mysql, но я не смог найти этот параметр нигде в документации по pyodbc.

0 голосов
/ 19 июня 2019

Вы можете создать 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'
            }
        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...