检查约束失败,错误完全重击

时间:2020-05-11 11:51:55

标签: mysql mysql-python

我正在使用MySQL Ver 8.0.20 for Linux on x86_64来管理数据库。我了解到8.0.16以下版本的“检查约束”不起作用,因此我按照this article升级到上述版本。因此,它停止提供语法错误。但是现在,只要检查约束失败,它就会返回

(-1, "error totally whack")

我的sql文件是:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";



--
-- Table Site
--

CREATE TABLE `Site`(
  `sid` int(50) NOT NULL PRIMARY KEY,
  `sname` varchar(50) NOT NULL,
  `saddr` varchar(50) NOT NULL
);


--
-- Table Hospital
--

CREATE TABLE `Hospital` (
  `hid` int(50) NOT NULL PRIMARY KEY,
  `hname` varchar(50) NOT NULL,
  `haddr` varchar(100) NOT NULL,
  `hcontact` varchar(20) NOT NULL
);


--
-- Table Organization
--

CREATE TABLE `Organization` (
  `oid` int(50) NOT NULL PRIMARY KEY,
  `oname` varchar(50) NOT NULL,
  `oaddr` varchar(100) NOT NULL,
  `ocontact` varchar(20) NOT NULL
);


--
-- Table Donor
--

CREATE TABLE `Donor`(
  `did` int(50) NOT NULL PRIMARY KEY,
  `oid` int(50) NOT NULL,
  `dname` varchar(50) NOT NULL,
  `dblood` varchar(50) NOT NULL,
  `dage` int(50) NOT NULL,
  `dsex` char(10) NOT NULL,
  `dmail` varchar(50) NOT NULL UNIQUE,
  `dcount` int(40) NOT NULL,
  CONSTRAINT FK_Organization FOREIGN KEY (`oid`) REFERENCES `Organization`(`oid`),
  CONSTRAINT CHK_PersonAge CHECK (`dage`>=17)
);


--
-- Table Volunteer  : Is a weak entity 
-- 

CREATE TABLE `Volunteer`(
  `vid` int(50) NOT NULL,
  `hid` int(50) NOT NULL,
  `vname` varchar(50) NOT NULL,
  PRIMARY KEY(`vid`, `hid`),
  CONSTRAINT FK_Hospital FOREIGN KEY (`hid`) REFERENCES `Hospital`(`hid`)

);



--
-- Table Donation
--

CREATE TABLE `Donation`(
  `did` int(50) NOT NULL,
  `vid` int(50) NOT NULL,
  `hid` int(50) NOT NULL,  
  `sid` int(50) NOT NULL,
  `ddate` DATE NOT NULL, -- YYYY-MM-DD format
  PRIMARY KEY(`did`, `ddate`),
  CONSTRAINT FK_Donor FOREIGN KEY (`did`) REFERENCES `Donor`(`did`),
  CONSTRAINT FK_VolunteerPresence FOREIGN KEY (`vid`,`hid`) REFERENCES `Volunteer`(`vid`,`hid`),
  CONSTRAINT FK_Site FOREIGN KEY (`sid`) REFERENCES `Site`(`sid`),
  CONSTRAINT CHK_Date CHECK (`ddate` >= '2019-01-20')
);


-- Triggers

-- Make dcount 0 if anything else entered


DELIMITER $$

CREATE TRIGGER `Donation_Count`
BEFORE INSERT
ON `Donor` FOR EACH ROW
BEGIN
  SET NEW.dcount = 0;
END$$

DELIMITER ;


-- Update the dcount

DELIMITER $$


CREATE trigger `Donation_Count_Incrementer`
AFTER INSERT
ON `Donation` FOR EACH ROW
BEGIN
  UPDATE `Donor` SET `dcount` = `dcount` + 1 WHERE `did` = NEW.did;
END$$

DELIMITER ;



COMMIT;

对于使用以下查询的表捐赠者

INSERT INTO Donor VALUES(50,4, 'Colan Steve', 'B+', 15, 'Male', 'hawkeyalaoape@gmail.com',0)

它返回上述错误,而不是说某某表中的检查约束失败。年龄必须大于或等于17岁。

查询发生类似的错误

INSERT INTO Donation VALUES(1,1,1,1,'1999-08-01');

日期必须大于2019-01-20

我正在Flask中使用它 我的备份文件

from flask import Flask, render_template, request
from flask_mysqldb import MySQL


app = Flask(__name__)

app.config['MYSQL_USER'] = 'user'
app.config['MYSQL_PASSWORD'] = 'PASSWORD'
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_DB'] = 'donationdb'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

mysql = MySQL(app)

@app.route('/', methods=['post', 'get'])


def index():

    cur = mysql.connection.cursor()

    if request.method == 'POST':

        query = request.form['inputquery']
        try:

            cur.execute(query)
            results = cur.fetchall()
            mysql.connection.commit()

            if len(results) > 0:
                return render_template('index.html', results = results, show = 1, error = 0, msg='')
            else:

                return render_template("index.html", results = results, show = 0, error = 0, msg = 'No Rows Returned', myquery = query)

        except Exception as e:

            print(e)    

            return render_template('index.html', results= (), show = 0, error = 1 ,msg= e, myquery = query) 

    else:
        return render_template('index.html', results = (), show = 0, error = 0, myquery = '')


if __name__ == '__main__':
    app.run(debug=True)

有人可以建议修复吗?另外,请解释此错误的含义以及发生的原因。

0 个答案:

没有答案
相关问题