[英]sqlalchemy.exc.IntegrityError - mySql - Error with primary key in auto-increment and storage in database
我正在開發Flask-sqlalchemy應用程序並使用mySql數據庫。 我有一個表單,從中接收要存儲在名為“ intent”的數據庫表中的數據。 該表有2列:intent_id和intent_name。
這是我的SqlAlchemy模型的代碼:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Intent(db.Model):
__tablename__ = 'intent'
intent_id = db.Column('intent_id', db.Integer, primary_key=True)
intent_name = db.Column(db.String(250))
這是我的Flask Routes文件的代碼:
from flask import Flask, render_template, request, session, redirect, url_for
from models import db, Intent, Sentence
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
@app.route("/", methods = ['POST', 'GET'])
def index():
if request.method == 'POST':
intentobj = Intent(intent_name = request.form['intent'])
db.session.add(intentobj)
db.session.commit()
return render_template("index.html", intent_data = Intent.query.all())
elif request.method == 'GET':
return render_template("index.html", intent_data = Intent.query.all())
我收到此錯誤:
sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1364, "Field 'intent_id' doesn't have a default value") [SQL: 'INSERT INTO intent (intent_name) VALUES (%s)'] [parameters: ('def',)]
當我創建數據庫表的類的對象時,我僅將intent_name存儲在其中(如上所述)。 我猜想intent_id是自動遞增的,並存儲在數據庫中,因為它是主鍵,但這種方式無法正常工作。
請注意,我是使用phpmyadmin創建表的,而不是通過python創建的。
請幫助我刪除此錯誤。 謝謝。
我認為mysql不會自動增加主鍵。 將autoincrement=True
添加到column語句
intent_id = db.Column('intent_id', db.Integer, primary_key=True, autoincrement=True)
或者,由於您是直接使用sql生成代碼,因此請使用
intent_id int NOT NULL PRIMARY_KEY AUTO_INCREMENT
更新問題出在數據庫表上。 主鍵未設置為自動遞增。 因此,嘗試使用此命令實際上是可行的:
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.