我现在正在研究烧瓶和烧瓶-sqlalchemy 的主要概念。牢记教程中的信息(介绍和上下文),我正在尝试创建一个简单的数据库。我的 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 运行以下命令时:
admin = mumsUsers('admin', 'admin@example.com')
db.session.add(管理员)
db.session.commit()
只出现一条记录(正如预期的那样)。
因此我的问题是如何防止对 commit() 的双重调用?
更新 出现的问题是我的错引起的,同时进行循环导入。事实上,我没有注意到我为应用程序包调用了导入。因此请忽略此帖。