2011-06-05 15 views
14

La ubicación de mysql.sock en mi sistema es /usr/local/mysql5/mysqld.sock¿Es posible usar Mysql con SqlAlchemy y Flask si mi socket mysql no está en/tmp?

thrilllap-2:tmp reuven$ mysqld --print-defaults 
mysqld would have been started with the following arguments: 
--socket=/usr/local/mysql5/mysqld.sock --port=3306 

Cuando trato de usar MySQL a través de sqlalchemy del frasco, me sale:

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 

El programa mysql se conecta correctamente a la base de datos, al igual que cualquier otro cliente mysql en mi sistema.

Mi my.cnf tiene la ubicación correcta para la toma

[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 

La base de la biblioteca "SQLAlchemy" tiene una opción donde se puede especificar la ubicación de la mysql.sock, pero esto no se expone a través la biblioteca sqlalchemy/frasco

http://packages.python.org/Flask-SQLAlchemy/config.html

Mis preguntas:

  1. ¿Dónde consigue sqlalchemy la idea de que /tmp/mysql.sock es la ubicación correcta?
  2. ¿Hay una manera de cambiar el valor por defecto a través del conector de Flash-SQLAlchemy

Respuesta

23

Vas a tener que desenterrar la sintaxis exacta, pero para MySQL Creo que usar un opt unix_socket consulta. Algo como:

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

Debería ser su URI de conexión para SQLAlchemy.

11

Sí! Sean tenía razón

app.config['SQLALCHEMY_DATABASE_URI'] = ''mysql://dayenu:[email protected]/dayenu?unix_socket=/usr/local/mysql5/mysqld.sock 
db = SQLAlchemy(app) 

funciona bien! Creo que este parámetro lo usa pyodbc, que es lo que SQLAlchemy usa para hablar con mysql, pero no pude encontrar este parámetro en ninguna parte de la documentación de pyodbc.

Cuestiones relacionadas