Je možné použít MySQL s SqlAlchemy a baňky, jestli moje mysql zásuvka není / tmp?

hlasů
14

Místo pro mysql.sock na mém systému je /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 

Když se snažím používat mysql via sqlalchemy z baňky, dostanu:

  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 Program se připojí správně do databáze, stejně jako každý jiný mysql klienta na mém systému.

Můj my.cnf má správné umístění do zásuvky

[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

Dále jen „SQLAlchemy“ knihovna základna má možnost ve kterém můžete určit umístění mysql.sock, ale to není vystavena prostřednictvím sqlalchemy / baňky knihovny

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

Moje otázky:

  1. Kde dělá sqlalchemy dostat myšlenku, že /tmp/mysql.sock je správné umístění?
  2. Existuje způsob, jak změnit výchozí přes konektor Flash-SQLAlchemy
Položena 05/06/2011 v 21:57
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
23

Budete muset vykopat přesnou syntaxi, ale pro MySQL myslím, že oni používají unix_socketdotazu opt. Něco jako:

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

By měla být vaše připojení URI pro SQLAlchemy.

Odpovězeno 05/06/2011 v 22:04
zdroj uživatelem

hlasů
11

Ano! Sean má pravdu

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

funguje! Myslím si, že tento parametr je používán pyodbc, což je to, co SQLAlchemy používá mluvit s MySQL, ale nemohl jsem najít tento parametr kdekoli v dokumentaci pyodbc.

Odpovězeno 05/06/2011 v 22:24
zdroj uživatelem

hlasů
0

Dalo by se vytvořit conexión použitím

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'
            }
        )
)
Odpovězeno 19/06/2019 v 20:06
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more