如果我的mysql套接字不在/ tmp中,是否可以将Mysql与SqlAlchemy和Flask一起使用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我的mysql套接字不在/ tmp中,是否可以将Mysql与SqlAlchemy和Flask一起使用?相关的知识,希望对你有一定的参考价值。

我系统上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 

当我尝试通过sqlalchemy从烧瓶中使用mysql时,我得到:

  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连接器更改默认值
答案

你必须挖掘确切的语法,但对于MySQL我认为他们使用unix_socket查询选择。就像是:

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

应该是SQLAlchemy的连接URI。

另一答案

是!肖恩是对的

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文档中的任何地方都找不到这个参数。

以上是关于如果我的mysql套接字不在/ tmp中,是否可以将Mysql与SqlAlchemy和Flask一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器 (2)

(linux)mysql.sock文件不存在智能重装

“无法连接...通过套接字'/tmp/mysql.sock'”使用 C API mysql_real_connect() 但 /tmp/mysql.sock' 存在

找不到 mysql.sock

警告:mysql_connect(): 无法通过套接字'/tmp/mysql.sock' (2) 连接到本地 MySQL 服务器

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器