Flask 如何防止炼金术中的双重数据提交

Flask 如何防止炼金术中的双重数据提交,flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,我现在正在学习烧瓶和烧瓶炼金术的主要概念。记住教程中的信息,我正在尝试创建一个简单的数据库。 我的烧瓶应用程序结构如下: ./db/ ./db/models.py ./main.py 文件内容如下: ./db/ ./db/models.py ./main.py /main.py: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_

我现在正在学习烧瓶和烧瓶炼金术的主要概念。记住教程中的信息,我正在尝试创建一个简单的数据库。 我的烧瓶应用程序结构如下:

./db/
./db/models.py
./main.py
文件内容如下:

./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()
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
/db/models.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()
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
从flask.ext.sqlalchemy导入sqlalchemy
从烧瓶导入烧瓶,当前_应用程序
db=SQLAlchemy()
def create_app():
app=烧瓶(名称)
app.config['SQLALCHEMY\u DATABASE\u URI']='sqlite:////tmp/test.db'
db.init_应用程序(应用程序)
返回(应用程序)
类别编号(db.Model):
__tablename_uuu='mumsuser'
id=db.Column(db.Integer,主键=True)
username=db.Column(db.String(80),unique=True)
email=db.Column(db.String(80),unique=True)
定义初始化(自我、用户名、电子邮件):
self.username=用户名
self.email=电子邮件
定义报告(自我):
返回“%self.username”
当我检查sqlite数据库时,我看到sqlalchemy试图发送commit()两次。因此,为了停止应用程序崩溃,我必须删除unique=True参数。同时,当我从python shell运行以下命令时:

admin=mumsuser('admin','admin@example.com")

db.session.add(管理员)

db.session.commit()

仅显示一条记录(如预期)

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

更新 出现的问题是由于我在进行循环导入时的错误造成的。事实上,我没有注意到我为应用程序包调用了import。
因此,请忽略此帖子。

导致的问题与循环导入有关


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

您为什么要呼叫
Flask
两次?你只需要基本的,谢谢你的建议。我删除了它,但问题仍然存在。与其编辑问题,不如提交答案(循环导入),然后将其标记为关闭。有人可能会通过搜索引擎找到这个问题,而你就是那个人的英雄。