2016-05-03 13 views
1

私はpython &のmysqlデータベースと対話するためにpythonを利用してアプリケーションを継承しました。私が発行する場合: create_engineの問題mysql 5.7とsqlalchemy

mysql_engine = sqlalchemy.create_engine('mysql://uname:[email protected]:3306/testdb', connect_args={'use_unicode':True,'charset':'utf8', 'init_command':'SET NAMES UTF8'}, poolclass=NullPool)

は、起動時に、例外がスローされます。ただし

cmd = unicode("USE testdb")  
with mysql_engine.begin() as conn: 
     conn.execute(cmd) 

sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.xx.xx' (101)") None None 

を、IDLEを使用して私が行うことができます。

>>> import MySQLdb 
>>> Con = MySQLdb.Connect(host="192.168.xx.xx", port=3306, user="uname", passwd="pwd", db="testdb") 
>>> Cursor = Con.cursor() 
>>> sql = "USE testdb" 
>>> Cursor.execute(sql) 

アプリケーションをこの時点ではデフォルトでオンボードのsqliteデータベースを使用する方法。この後、上記のcreate_engineステートメントを使用して、MySQLデータベースに喜んで切り替えることができます。しかし、再起動すると、MySQLデータベースの接続は再び失敗し、オンボードのsqlite dbなどにデフォルト設定されます。

これがどのように起こっているのか、誰にも何か提案がありますか?

ちょうど私がこれを更新すると思った - 問題は上記のとおり正確に発生します。私は、ユーザがメニューオプションを選択して手動でMySQLデータベースに接続できるように、アプリケーションを更新しました。これは、アプリケーションが起動しているときは例外を除いて同じコードを呼び出しますが、アプリが起動されていれば正常に動作します。

MySQLインスタンスは、アプリケーションとは完全に別々で実行されるため、常に接続を受信できるようにする必要があります。

私は基本的な質問は、私はどのようにアプリケーションが起動して実行されているときに同じ接続コードが動作することができますが、開始時に例外をスローすると思いますか?

接続パラメータまたはリモートデータベースに依存しない使用可能な接続の作成に失敗する可能性のあるSQLAlchemyの成果物はありませんか?

+0

決して実行を設定していないかどうPythonは死ぬ?例外?セグフェルト?出力はありませんか? – univerio

+0

@univerio - 申し訳ありませんが、私はそこに十分な情報を提供していませんでした。例外が発生しました。 – RadioRaheem

答えて

0

ああ、すべてのアプリケーションは、リモート・データベースへの最初の要求をするだろうというとき、ネットワークインターフェースは設定が終了していなかったため、起動時に例外の理由だっ

...今では明らかに思えます。 (なぜ同じことが後で試行されると成功するのか)。リモートデータベースとの通信など

は、アプリケーションのための前提条件である、私は今、このような何か:私のアプリケーションの起動スクリプトに...

if grep -Fxq "mysql" /path/to/my/db/config.config 
then 
    while ! ip a | grep inet.*wlan0 ; do sleep 1; echo "waiting for network..."; done; 
fi 

を - ネットワークインタフェースが設定が終了していることを確実にすることアプリケーションを実行する前にそれはまだそれがローカルデータベースを使用してタイムアウトし、デフォルトすることを可能にするためにいくつかのfinessingを必要とするので、もちろん

、アプリケーションは、インタフェースは、あなたが何を意味する...、