簡體   English   中英

sqlalchemy.exc.IntegrityError-mySql-自動增量主鍵和數據庫中存儲錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM