2013-05-06 79 views
0

我正在研究燒瓶和燒瓶 - sqlalchemy的主要概念。記住教程中的信息(introcontexts)我試圖創建一個簡單的數據庫。 我的瓶的應用程序被strucured如下:如何防止燒瓶中的雙數據提交 - sqlalchemy

./db/ 
./db/models.py 
./main.py 

文件的內容如下:

./main.py

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config.from_object(__name__) 

from db.models import create_app 

dbapp = create_app() 
with dbapp.test_request_context(): 
    from db.models import db, mumsUsers 
    db.create_all() 
    db.session.rollback() 
    admin = mumsUsers("admin", "[email protected]") 
    db.session.add(admin) 
    db.session.commit() 

./db/models.py

from flask.ext.sqlalchemy import SQLAlchemy 
from flask import Flask, current_app 

db = SQLAlchemy() 

def create_app(): 
    app = Flask(__name__) 
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
    db.init_app(app) 
    return(app) 

class mumsUsers(db.Model): 
    __tablename__ = 'mumsUsers' 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    email = db.Column(db.String(80), unique=True) 

    def __init__(self, username, email): 
    self.username = username 
    self.email = email 

    def __repr__(self): 
    return '<User %r>' % self.username 

當我檢查在sqlite數據庫中,我看到sqlalchemy是tr ying發送commit()兩次。所以我必須刪除unique = True參數以停止應用程序崩潰。與此同時,當我請從蟒殼以下commans:

管理員= mumsUsers( '管理員', '[email protected]')

db.session.add(管理員)

db.session.commit()

只出現一個記錄(預計)。

因此,我的問題是如何防止雙重調用commit()?

更新 出現的問題是由於我的錯誤導致循環進口導致的。事實上,我沒有注意到我爲應用程序包調用了導入。 因此,請忽略此帖。

+0

你爲什麼要調用'Flask'兩次?你只需要它在主要。 – 2013-05-06 15:41:18

+0

謝謝您的建議。我刪除了它,但問題仍然存在。 – wanderlust 2013-05-06 15:58:25

+1

而不是編輯問題,請提交答案(循環導入),然後將其標記爲關閉。有人可能會通過搜索引擎觸及這個問題,你會成爲那個人的英雄。 – Clint 2013-05-06 21:23:42

回答

0

引起的問題與循環進口有關。

請在查詢之前檢查您輸入的內容。