gpt4 book ai didi

sql - 完整性错误 - Flask 和 SQLAlchemy

转载 作者:行者123 更新时间:2023-12-03 16:01:49 26 4
gpt4 key购买 nike

这是我第一次使用 SQLAlchemy,我试图将一个项目插入到表格中,然后让 Flask 打印出该项目。但是,当我没有捕获异常时,我不断收到这样的完整性错误:

sqlalchemy.exc.IntegrityError: (IntegrityError) column email is not unique u'INSERT INTO user (username, email) VALUES (?, ?)' ('test', 'test@gmail.com')

我有以下代码:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.exc import IntegrityError

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"

db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)

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

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

@app.route("/")
def index():
return User.query.all() # I don't think this will work

if __name__ == "__main__":
db.create_all()
try:
x = User("test", "test@gmail.com")
db.session.add(x)
db.session.commit()
print "worked"
except IntegrityError:
print "Not Working"

app.run(debug=True)

有人介意帮忙吗?我对 IntegrityError 做了一些研究,但大部分文档都是关于处理错误而不是防止错误。

最佳答案

好吧,这个原因有点棘手:)
该错误消息确实意味着该电子邮件地址已经在数据库中。但是这到底是为什么呢?因为debug标志告诉内置服务器也使用重新加载器。这个重新加载器基本上使应用程序在第一次启动时运行两次。您可以在输出中看到:

$ python2 server.py
worked
* Running on http://127.0.0.1:5000/
* Restarting with reloader
Not Working
有多种方法可以解决这个问题。 Quick'n'dirty 就是禁用重新加载器:
app.run(debug=True, use_reloader=False)
更好的方法是不以这种方式填充测试数据库。相反,您可以使用 Flask's CLI 创建一个单独的自定义命令。 .

关于sql - 完整性错误 - Flask 和 SQLAlchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17642366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com