sqlalchemy.exc.IntegrityError - mySql - 数据库中自动增量和存储中的主键出错

时间:2018-04-22 19:24:07

标签: python mysql flask flask-sqlalchemy

我正在开发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创建表。

请帮我删除此错误。感谢。

1 个答案:

答案 0 :(得分:0)

我不认为mysql会自动生成主键。 将autoincrement=True添加到列语句

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