2016-06-16 13 views
-1

私はこのチュートリアルに従うにしようとしています:私は、Webアプリが登場してい
http://code.tutsplus.com/tutorials/creating-a-web-app-from-scratch-using-python-flask-and-mysql--cms-22972Simple Flask app - ローカルホスト上のデータベースに接続できませんか?

、私はページ間閲覧することができますが、私がクリックしたときに私はPythonで、このエラーを取得する内容を記入の上、「登録」:

ERROR:__main__:Exception on /signUp [POST] 
OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (10061)") 

ここで何が起こっているのか分かりません。app.pyルートフォルダに "BucketList.db"というデータベースがあります。

どこに問題があるのか​​を知る方法はありますか?なぜそれがdbに接続できないのですか?私はSqliteを使用してデータベースに直接接続することができます。

ご了承ください。ありがとう!!

from flask import Flask, render_template, json, request 
from flask_mysqldb import MySQL 
from werkzeug import generate_password_hash, check_password_hash 

mysql = MySQL() 
app = Flask(__name__) 

# MySQL configurations 
app.config['MYSQL_DATABASE_DB'] = 'BucketList' 
app.config['MYSQL_DATABASE_HOST'] = 'localhost' 
app.config['MYSQL_DATABASE_PORT'] = '5002' 
mysql.init_app(app) 

@app.route('/') 
def main(): 
    return render_template('index.html') 

@app.route('/showSignUp') 
def showSignUp(): 
    return render_template('signup.html') 


@app.route('/signUp',methods=['POST','GET']) 
def signUp(): 
    try: 
     _name = request.form['inputName'] 
     _email = request.form['inputEmail'] 
     _password = request.form['inputPassword'] 

     # validate the received values 
     if _name and _email and _password: 

      # All Good, let's call MySQL 
      conn = mysql.connect() 
      cursor = conn.cursor() 
      _hashed_password = generate_password_hash(_password) 
      cursor.callproc('sp_createUser',(_name,_email,_hashed_password)) 
      data = cursor.fetchall() 

      if len(data) is 0: 
       conn.commit() 
       return json.dumps({'message':'User created successfully !'}) 
      else: 
       return json.dumps({'error':str(data[0])}) 
     else: 
      return json.dumps({'html':'<span>Enter the required fields</span>'}) 

    except Exception as e: 
     return json.dumps({'error':str(e)}) 
    finally: 
     cursor.close() 
     conn.close() 

if __name__ == "__main__": 
    app.run(port=5002) 
+1

それはあなたがMySQLデータベースに接続を使用しているコードのように見えますが、あなたはBucketList.dbというデータベースを持っているので、あなたはSQLiteのを使用しているように見えます、要するに、あなたが使用しようとしていますmysqlドライバがsqliteに接続するかどうかわかりませんが、フラスコでsqliteを使用して確認してくださいhttp://flask.pocoo.org/docs/0.11/patterns/sqlite3/ – scrineym

+0

ありがとう、scrineym。私ははるかにPythonのsqliteに慣れており、作業バージョンを書いて、以下に投稿しています。今残っていることはすべて、jsonの部品は動作しません!少なくとも私は固定された主なビットを持っています。ありがとう! – Ciaran

答えて

1

finally節で再度接続しないでください。単に、conn.close()とcursor.close()を記述します。あなたの問題を解決するはずです。

+0

こんにちは、応答ありがとうございます。私はそれが "if"節の外につながるかどうかを見たいと思っていたので、それらを取り除くことを忘れていました。 (これを反映するように編集された投稿)残念ながら私はまだ同じ問題を抱えています。 – Ciaran

+0

それは動作するはずです。さて、** mysqld **(またはmysqlサーバインスタンス)インスタンスが実行中であるかどうかを確認してください。この他にも、接続しようとしているDBに対して**特権**をチェックする必要があります。おそらく、mysqlサーバが実行されていないか、DBに接続しているときに不正な認証情報を提供しているという問題があります。また、コマンドプロンプトから接続を確認してください。シェルに 'mysql'コマンドを入力してください。 – devil00

0

私はscrineymによって提案されたSqlite実装を使用して作業するコードです。それはあなたがデータベースに入り、コミットするアプリケーションを持っているところまで働きます。

私の唯一の問題は、私が提出する/エラーを取得する/フィールドデータが書き込まれていないときにjsonの部品が動作しないことです!元の質問に作用する解決策は少なくともあります!

from flask import Flask, render_template, json, request 
from werkzeug import generate_password_hash, check_password_hash 
import sqlite3 
from flask import g 

DATABASE = 'BucketList.db' 

#mysql = MySQL() 
app = Flask(__name__) 

@app.route('/') 
def main(): 
    return render_template('index.html') 

@app.route('/showSignUp') 
def showSignUp(): 
    return render_template('signup.html') 


@app.route('/signUp',methods=['POST','GET']) 
def signUp(): 
    _name = request.form['inputName'] 
    _email = request.form['inputEmail'] 
    _password = request.form['inputPassword'] 

    # validate the received values 
    if _name and _email and _password: 
     print _name, _email 

     db = g._database = sqlite3.connect(DATABASE) 
     cursor = get_db().cursor() 
     print "Database opened" 

     _hashed_password = generate_password_hash(_password) 
     print _hashed_password 

     _userid = str(_name) + str(_hashed_password[0:4]) 
     db.execute('INSERT INTO tbl_user VALUES (?,?,?,?)',(_userid,_name,_email,_hashed_password)) 
     db.commit() 

     data = cursor.fetchall() 
     if len(data) is 0: 
      conn.commit() 
      return json.dumps({'message':'User created successfully !'}) 
     else: 
      return json.dumps({'error':str(data[0])}) 
    else: 
     return json.dumps({'html':'<span>Enter the required fields</span>'}) 

     cursor.close() 
     db.close() 

     print "Database closed" 

    "Print here" 

if __name__ == "__main__": 
    app.run(port=5002) 
関連する問題