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/フラスコライブラリでは公開されません。

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

私の質問:

  1. sqlalchemyは、/ tmp / mysql.sockが正しい場所であるという考えをどこで得ますか?
  2. Flash-SQLAlchemyコネクタを介してデフォルトを変更する方法はありますか
4

3 に答える 3

31

unix_socket正確な構文を掘り下げる必要がありますが、MySQLの場合はクエリoptを使用していると思います。何かのようなもの:

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)

正常に動作します!このパラメーターは、SQLAlchemyがmysqlと通信するために使用するpyodbcによって使用されていると思いますが、pyodbcのドキュメントのどこにもこのパラメーターが見つかりませんでした。

于 2011-06-05T21:24:05.083 に答える
0

を使用して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'
            }
        )
)
于 2019-06-19T17:06:08.077 に答える