如何防止在flask-sqlalchemy中提交双数据

时间:2013-05-06 15:35:03

标签: flask flask-sqlalchemy

我正在研究烧瓶和烧瓶 - sqlalchemy的主要概念。从教程(introcontexts)了解我的信息,我正在尝试创建一个简单的数据库。 我的Flask应用程序结构如下:

./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", "admin@example.com")
  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尝试两次发送commit()。所以我必须删除 unique = True 参数才能停止应用程序崩溃。同时我从python shell运行以下commans:

  
    

admin = mumsUsers('admin','admin @ example.com')

         

db.session.add(管理员)

         

db.session.commit()

  

只显示一条记录(正如预期的那样)。

因此我的问题是如何防止对commit()进行双重调用?

更新 出现问题的原因是我的错,同时进行了循环导入。事实上,我没有注意到我为应用程序包调用了import。 因此请忽略这篇文章。

1 个答案:

答案 0 :(得分:0)

引起的问题与循环导入有关。

请在询问之前检查导入的内容。