from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from flask_restful import Resource, reqparse, Api
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
app.secret_key = 'Thinkonce'
api = Api(app)
db = SQLAlchemy()
class UserModel(db.Model):
__tablename__ = 'items'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(120), unique=False)
email = db.Column(db.String(120), unique=False)
def __init__(self, username, email):
self.email = email
self.username = username
def json(self):
return {"username": self.username, "email": self.email}
@app.before_first_request
def create_tables():
db.create_all()
@app.route('/')
def home():
return "Home Page"
class ItemList(Resource):
parser = reqparse.RequestParser()
parser.add_argument('username',
type=str,
required=True,
help="username cannot be blank"
)
parser.add_argument('email',
type=str,
required=True,
help="email cannot be blank"
)
def post(self):
data = ItemList.parser.parse_args()
db.session.add(UserModel(username=data["username"], email=data['email']))
db.session.commit()
return {"message":"User created successfully"}, 201
def get(self):
print(UserModel.query.all())
return {'item':[i.json() for i in UserModel.query.all()]}, 200
api.add_resource(ItemList, '/api')
if __name__ == '__main__':
db.init_app(app)
app.run(port=5000, debug=True, use_reloader=False)
我要插入的数据:
{
"username":"soubhagya",
"email":"soubhagya@gmail.com"
}
sqlalchemy不接受重复数据。 有没有办法避免这种情况或如何插入重复数据。 它是给予sqlalchemy.exc.IntegrityError完整性你知道吗
错误:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: items.email [SQL: 'INSERT INTO items (username, email) VALUES (?, ?)'] [parameters: ('soubhagya', 'soubhagya@gmail.com')] (Background on this error at: http://sqlalche.me/e/gkpj) // Werkzeug Debugger</title>
<link rel="stylesheet" href="?__debugger__=yes&cmd=resource&f=style.css"
type="text/css">
<!-- We need to make sure this has a favicon so that the debugger does
not by accident trigger a request to /favicon.ico which might
change the application state. -->
<link rel="shortcut icon"
href="?__debugger__=yes&cmd=resource&f=console.png">
<script src="?__debugger__=yes&cmd=resource&f=jquery.js"></script>
<script src="?__debugger__=yes&cmd=resource&f=debugger.js"></script>
<script type="text/javascript">
var TRACEBACK = 140039101353152,
CONSOLE_MODE = false,
EVALEX = true,
EVALEX_TRUSTED = false,
SECRET = "kTQfbKAGsVJTWQ4ihbMf";
</script>
我也分享了这个模型。你知道吗
请调查一下这个。你知道吗
问题已编辑,我已分享了我的完整代码。你知道吗
现在请看一看
问题似乎出现了,因为sqlalchemy隐式地为电子邮件字段添加了唯一的约束。这就留下了两种可能的解决方案。你知道吗
首先,通过
或者给这个专栏起个别的名字。你知道吗
为了更好地理解SQLAlchemy中的约束,我建议访问its documentation。你知道吗
UPD(基于对该答案的评论)
该错误与SQLite或SQLAlchemy无关。它只是说您正在尝试将非唯一值添加到一个列中,其中所有值都应该是唯一的,您必须以某种方式进行处理。另外,无论是Flask还是SQLAlchemy都不会进行任何数据迁移。这意味着,如果向模型中添加一些字段或向数据库scheme中添加另一个模型,则需要从头开始创建数据库或使用专用工具进行数据迁移。你知道吗
可能,您只需要删除存在此约束的旧
data.db
文件。你知道吗相关问题 更多 >
编程相关推荐