2015-12-15 102 views
0

我是一個嘗試創建簡單應用的Flask新手。我目前卡在用戶註冊,我試圖將數據保存在數據庫中,但沒有發生。但是,我正在做的日誌記錄表明該操作是成功的。有人能告訴我我做錯了什麼嗎?無法寫入MySQL數據庫

下面是部分代碼的那會幫助你理解我想要做的事:

from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash 
from flask.ext.mysqldb import MySQL 

# Configuration 
MYSQL_HOST  = 'localhost' 
MYSQL_USER  = 'root' 
MYSQL_PASSWORD = 'root' 
MYSQL_DB  = 'up2date' 
DEBUG   = True 
SECRET_KEY  = 

'\xc6)\x0f\\\xc5\x86*\xd7[\x92\x89[\x95\xcfD\xfd\xc1\x18\x8e\xf1P\xf7_\r' 

# Create the flask app 
app = Flask(__name__) 
app.config.from_object(__name__) 
# Create instance for working with MySQL 
mysql = MySQL(app) 

# Function to connect to DB 
def connect_db(): 
    return mysql.connection.cursor() 

# define functions that will make DB available automatically on each request 
@app.before_request 
def before_request(): 
    g.db = connect_db() 

@app.teardown_request 
def teardown_request(exception): 
    g.db.close() 

最後,執行用戶註冊代碼:

@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    if request.method == 'POST': 
     email = request.form['email'] 
     password = request.form['password'] 
     result = g.db.execute('INSERT INTO users (email, password) VALUES (%s, %s)', [email, password]) 
     print(email, password) 
     print(result, " rows affected") 
     flash('Registration successful! You may log in now.') 
     return redirect(url_for('show_home')) 

兩個print語句確認電子郵件地址和密碼被正確捕獲,並且result變量包含1,表示1行受到影響。但數據庫中仍然沒有一行。我先前認爲這有事可做犯有,但g.db.commit()拋出錯誤:AttributeError的:「光標」對象有沒有屬性「提交」

+0

你能否提供'commit'的錯誤。 – ipinak

+0

@ipinak添加到我的文章的結尾! – dotslash

回答

2

我假設你使用MySQL的的Python

connect_db()返回遊標而不是連接。光標沒有commit()函數,正如例外所述,但是連接具有您需要的提交功能。我認爲你需要做的是:

def connect_db(): 
    return mysql.connection 

欲瞭解更多信息,你可以看看的code

+0

我不好意思提到圖書館。我實際上使用flask-mysqldb。我已經將import語句添加到我的代碼的頂部。 – dotslash

+0

Flask-MySQL使用MySQL-python,所以沒關係。我的建議工作了嗎? – ipinak

+1

好吧,好!非常感謝!它終於奏效了。 :D我只需要對代碼進行更改以確保在'g.db.cursor()'上調用了execute()',並且您的建議可行。非常感謝您的幫助。 :-) – dotslash