18

我系统上 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 连接器更改默认值
4

3 回答 3

31

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

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

应该是 SQLAlchemy 的连接 URI。

于 2011-06-05T21:04:22.287 回答
14

是的!肖恩是对的

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

于 2011-06-05T21:24:05.083 回答
0

您可以使用创建锥体

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'
            }
        )
)
于 2019-06-19T17:06:08.077 回答