Python 操作错误:外键不匹配

Python 操作错误:外键不匹配,python,sqlite,foreign-keys,mismatch,Python,Sqlite,Foreign Keys,Mismatch,我有两个表格要填写,“msrun”和“feature”功能“”有一个外键,指向“msrun”表的“msrun\u name”列。插入表格效果很好。但是,当我尝试从“feature”表中删除时,出现以下错误: pysqlite2.dbapi2.OperationalError: foreign key mismatch 根据SQLite手册中的外键规则: - The parent table does not exist, or - The parent key columns named in

我有两个表格要填写,“msrun”和“feature”功能“”有一个外键,指向“msrun”表的“msrun\u name”列。插入表格效果很好。但是,当我尝试从“feature”表中删除时,出现以下错误:

pysqlite2.dbapi2.OperationalError: foreign key mismatch
根据SQLite手册中的外键规则:

- The parent table does not exist, or
- The parent key columns named in the foreign key constraint do not exist, or
- The parent key columns named in the foreign key constraint are not the primary key of the parent table and are not subject to a unique constraint using collating sequence specified in the CREATE TABLE, or
- The child table references the primary key of the parent without specifying the primary key columns and the number of primary key columns in the parent do not match the number of child key columns.
我看不出我在违反什么。我的创建表如下所示:

DROP TABLE IF EXISTS `msrun`;
-- -----------------------------------------------------
-- Table `msrun`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `msrun` (
  `msrun_name` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `description` VARCHAR(500) NOT NULL );

DROP TABLE IF EXISTS `feature`;
-- -----------------------------------------------------
-- Table `feature`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature` (
  `feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `intensity` DOUBLE NOT NULL ,
  `overallquality` DOUBLE NOT NULL ,
  `charge` INT NOT NULL ,
  `content` VARCHAR(45) NOT NULL ,
  `msrun_msrun_name` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_feature_msrun1`
    FOREIGN KEY (`msrun_msrun_name` )
    REFERENCES `msrun` (`msrun_name` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC);
  CREATE INDEX `fk_feature_msrun1` ON `feature` (`msrun_msrun_name` ASC);
就我所见,父表存在,外键指向右父键,父键是主键,外键指定主键列

生成错误的脚本:

from pysqlite2 import dbapi2 as sqlite
import parseFeatureXML


connection = sqlite.connect('example.db')
cursor = connection.cursor()    
cursor.execute("PRAGMA foreign_keys=ON")

inputValues = ('example', 'description')
cursor.execute("INSERT INTO `msrun` VALUES(?, ?)", inputValues)
featureXML = parseFeatureXML.Reader('../example_scripts/example_files/input/featureXML_example.featureXML')

for feature in featureXML.getSimpleFeatureInfo():
    inputValues = (featureXML['id'], featureXML['intensity'],
                   featureXML['overallquality'], featureXML['charge'], 
                   featureXML['content'], 'example')
    # insert the values into msrun using ? for sql injection safety
    cursor.execute("INSERT INTO `feature` VALUES(?,?,?,?,?,?)", inputValues)
connection.commit()

for feature in featureXML.getSimpleFeatureInfo():
    cursor.execute("DELETE FROM `feature` WHERE feature_id = ?", (str(featureXML['id']),))    

编辑: 这些表具有链接到要素的外键。他们还没有被填满:

DROP TABLE IF EXISTS `convexhull`;
-- -----------------------------------------------------
-- Table `convexhull`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `convexhull` (
  `convexhull_id` INT PRIMARY KEY NOT NULL ,
  `mz` DOUBLE NOT NULL ,
  `rt` DOUBLE NOT NULL ,
  `feature_feature_id` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_convexhull_feature`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_convexhull_feature` ON `convexhull` (`feature_feature_id` ASC);

DROP TABLE IF EXISTS `position`;
-- -----------------------------------------------------
-- Table `position`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `position` (
  `position_id` INT PRIMARY KEY NOT NULL ,
  `dim0` INT NOT NULL ,
  `dim1` INT NOT NULL ,
  `feature_feature_id` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_position_feature1`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_position_feature1` ON `position` (`feature_feature_id` ASC);

DROP TABLE IF EXISTS `userParam_names`;
-- -----------------------------------------------------
-- Table `userParam_names`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `userParam_names` (
  `userParam_id` INT PRIMARY KEY NOT NULL ,
  `Name` VARCHAR(45) NOT NULL );

DROP TABLE IF EXISTS `feature_has_userParam_names`;
-- -----------------------------------------------------
-- Table IF EXISTS `feature_has_userParam_names`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature_has_userParam_names` (
  `feature_feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `userParam_names_userParam_id` INT NOT NULL ,
  CONSTRAINT `fk_feature_has_userParam_names_feature1`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_feature_has_userParam_names_userParam_names1`
    FOREIGN KEY (`userParam_names_userParam_id` )
    REFERENCES `userParam_names` (`userParam_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_feature_has_userParam_names_userParam_names1` ON `feature_has_userParam_names` (`userParam_names_userParam_id` ASC);
  CREATE INDEX `fk_feature_has_userParam_names_feature1` ON `feature_has_userParam_names` (`feature_feature_id` ASC);

DROP TABLE IF EXISTS `userParam_value`;
-- -----------------------------------------------------
-- Table IF EXISTS `userParam_value`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `userParam_value` (
  `iduserParam_value` INT PRIMARY KEY NOT NULL ,
  `userParam_name` VARCHAR(45) NOT NULL ,
  `value` VARCHAR(45) NOT NULL );

DROP TABLE IF EXISTS `feature_has_userParam_names_has_userParam_value`;
-- -----------------------------------------------------
-- Table `feature_has_userParam_names_has_userParam_value`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature_has_userParam_names_has_userParam_value` (
  `feature_has_userParam_names_feature_feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `feature_has_userParam_names_userParam_names_userParam_id` INT NOT NULL ,
  `userParam_value_iduserParam_value` INT NOT NULL ,
  CONSTRAINT `fk_feature_has_userParam_names_has_userParam_value_feature_ha1`
    FOREIGN KEY (`feature_has_userParam_names_feature_feature_id` , `feature_has_userParam_names_userParam_names_userParam_id` )
    REFERENCES `feature_has_userParam_names` (`feature_feature_id` , `userParam_names_userParam_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_feature_has_userParam_names_has_userParam_value_userParam_1`
    FOREIGN KEY (`userParam_value_iduserParam_value` )
    REFERENCES `userParam_value` (`iduserParam_value` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_feature_has_userParam_names_has_userParam_value_userParam_1` ON  `feature_has_userParam_names_has_userParam_value` (`userParam_value_iduserParam_value` ASC);
  CREATE INDEX `fk_feature_has_userParam_names_has_userParam_value_feature_ha1` ON  `feature_has_userParam_names_has_userParam_value` (`feature_has_userParam_names_feature_feature_id` ASC, `feature_has_userParam_names_userParam_names_userParam_id` ASC);
当我在SQLite管理器中执行delete语句时,它确实起作用


编辑2: 完全回溯:

Traceback (most recent call last):
  File "/homes/ndeklein/workspace/MS/Trunk/PyMS_dev/database/test.py", line 25, in <module>
    cursor.execute("DELETE FROM `feature` WHERE feature_id = 'f_13020522388175237334'")
pysqlite2.dbapi2.OperationalError: foreign key mismatch
在SQLite中,管理器工作


编辑3 包括所有表格:

--------------------------------------------------------
-- pyMS database. Drops all tables before it makes them, should be changed before release
--------------------------------------------------------


DROP TABLE IF EXISTS `msrun`;
-- -----------------------------------------------------
-- Table `msrun`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `msrun` (
  `msrun_name` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `description` VARCHAR(500) NOT NULL );


DROP TABLE IF EXISTS `feature`;
-- -----------------------------------------------------
-- Table `feature`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature` (
  `feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `intensity` DOUBLE NOT NULL ,
  `overallquality` DOUBLE NOT NULL ,
  `charge` INT NOT NULL ,
  `content` VARCHAR(45) NOT NULL ,
  `msrun_msrun_name` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_feature_msrun1`
    FOREIGN KEY (`msrun_msrun_name` )
    REFERENCES `msrun` (`msrun_name` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC);
  CREATE INDEX `fk_feature_msrun1` ON `feature` (`msrun_msrun_name` ASC);


DROP TABLE IF EXISTS `convexhull`;
-- -----------------------------------------------------
-- Table `convexhull`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `convexhull` (
  `convexhull_id` INT PRIMARY KEY NOT NULL ,
  `mz` DOUBLE NOT NULL ,
  `rt` DOUBLE NOT NULL ,
  `feature_feature_id` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_convexhull_feature`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_convexhull_feature` ON `convexhull` (`feature_feature_id` ASC);


DROP TABLE IF EXISTS `position`;
-- -----------------------------------------------------
-- Table `position`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `position` (
  `position_id` INT PRIMARY KEY NOT NULL ,
  `dim0` INT NOT NULL ,
  `dim1` INT NOT NULL ,
  `feature_feature_id` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_position_feature1`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_position_feature1` ON `position` (`feature_feature_id` ASC);


DROP TABLE IF EXISTS `userParam_names`;
-- -----------------------------------------------------
-- Table `userParam_names`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `userParam_names` (
  `userParam_id` INT PRIMARY KEY NOT NULL ,
  `Name` VARCHAR(45) NOT NULL );


DROP TABLE IF EXISTS `feature_has_userParam_names`;
-- -----------------------------------------------------
-- Table IF EXISTS `feature_has_userParam_names`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature_has_userParam_names` (
  `feature_feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `userParam_names_userParam_id` INT NOT NULL ,
  CONSTRAINT `fk_feature_has_userParam_names_feature1`
    FOREIGN KEY (`feature_feature_id` )
    REFERENCES `feature` (`feature_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_feature_has_userParam_names_userParam_names1`
    FOREIGN KEY (`userParam_names_userParam_id` )
    REFERENCES `userParam_names` (`userParam_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_feature_has_userParam_names_userParam_names1` ON `feature_has_userParam_names` (`userParam_names_userParam_id` ASC);
  CREATE INDEX `fk_feature_has_userParam_names_feature1` ON `feature_has_userParam_names` (`feature_feature_id` ASC);


DROP TABLE IF EXISTS `userParam_value`;
-- -----------------------------------------------------
-- Table IF EXISTS `userParam_value`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `userParam_value` (
  `iduserParam_value` INT PRIMARY KEY NOT NULL ,
  `userParam_name` VARCHAR(45) NOT NULL ,
  `value` VARCHAR(45) NOT NULL );


DROP TABLE IF EXISTS `feature_has_userParam_names_has_userParam_value`;
-- -----------------------------------------------------
-- Table `feature_has_userParam_names_has_userParam_value`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `feature_has_userParam_names_has_userParam_value` (
  `feature_has_userParam_names_feature_feature_id` VARCHAR(40) PRIMARY KEY NOT NULL ,
  `feature_has_userParam_names_userParam_names_userParam_id` INT NOT NULL ,
  `userParam_value_iduserParam_value` INT NOT NULL ,
  CONSTRAINT `fk_feature_has_userParam_names_has_userParam_value_feature_ha1`
    FOREIGN KEY (`feature_has_userParam_names_feature_feature_id` , `feature_has_userParam_names_userParam_names_userParam_id` )
    REFERENCES `feature_has_userParam_names` (`feature_feature_id` , `userParam_names_userParam_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_feature_has_userParam_names_has_userParam_value_userParam_1`
    FOREIGN KEY (`userParam_value_iduserParam_value` )
    REFERENCES `userParam_value` (`iduserParam_value` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_feature_has_userParam_names_has_userParam_value_userParam_1` ON  `feature_has_userParam_names_has_userParam_value` (`userParam_value_iduserParam_value` ASC);
  CREATE INDEX `fk_feature_has_userParam_names_has_userParam_value_feature_ha1` ON  `feature_has_userParam_names_has_userParam_value` (`feature_has_userParam_names_feature_feature_id` ASC, `feature_has_userParam_names_userParam_names_userParam_id` ASC);


DROP TABLE IF EXISTS `precursor`;
-- -----------------------------------------------------
-- Table `precursor`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `precursor` (
  `precursor_id` INT PRIMARY KEY NOT NULL ,
  `ion_mz` DOUBLE NOT NULL ,
  `charge_state` INT NOT NULL ,
  `peak_intensity` DOUBLE NOT NULL );


DROP TABLE IF EXISTS `spectrum`;
-- -----------------------------------------------------
-- Table `spectrum`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `spectrum` (
  `spectrum_index` INT PRIMARY KEY NOT NULL ,
  `ms_level` INT NOT NULL ,
  `base_peak_mz` DOUBLE NOT NULL ,
  `base_peak_intensity` DOUBLE NOT NULL ,
  `total_ion_current` DOUBLE NOT NULL ,
  `lowest_observes_mz` DOUBLE NOT NULL ,
  `highest_observed_mz` DOUBLE NOT NULL ,
  `scan_start_time` DOUBLE NOT NULL ,
  `ion_injection_time` DOUBLE NOT NULL ,
  `msrun_msrun_name` VARCHAR(40) NOT NULL ,
  `precursor_precursor_id` INT NOT NULL ,
  CONSTRAINT `fk_spectrum_msrun1`
    FOREIGN KEY (`msrun_msrun_name` )
    REFERENCES `msrun` (`msrun_name` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_spectrum_precursor1`
    FOREIGN KEY (`precursor_precursor_id` )
    REFERENCES `precursor` (`precursor_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_spectrum_msrun1` ON `spectrum` (`msrun_msrun_name` ASC);
  CREATE INDEX `fk_spectrum_precursor1` ON `spectrum` (`precursor_precursor_id` ASC);


DROP TABLE IF EXISTS `spectrum_has_feature`;
-- -----------------------------------------------------
-- Table `spectrum_has_feature`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `spectrum_has_feature` (
  `spectrum_spectrum_index` INT PRIMARY KEY NOT NULL ,
  `spectrum_msrun_msrun_name` VARCHAR(40) NOT NULL ,
  `spectrum_precursor_precursor_id` INT NOT NULL ,
  `feature_feature_id` VARCHAR(40) NOT NULL ,
  `feature_msrun_msrun_name` VARCHAR(40) NOT NULL ,
  CONSTRAINT `fk_spectrum_has_feature_spectrum1`
    FOREIGN KEY (`spectrum_spectrum_index` , `spectrum_msrun_msrun_name` , `spectrum_precursor_precursor_id` )
    REFERENCES `spectrum` (`spectrum_index` , `msrun_msrun_msrun_name` , `precursor_precursor_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_spectrum_has_feature_feature1`
    FOREIGN KEY (`feature_feature_id` , `feature_msrun_msrun_name` )
    REFERENCES `feature` (`feature_id` , `msrun_msrun_msrun_name` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX `fk_spectrum_has_feature_feature1` ON `spectrum_has_feature` (`feature_feature_id` ASC, `feature_msrun_msrun_name` ASC);
  CREATE INDEX `fk_spectrum_has_feature_spectrum1` ON `spectrum_has_feature` (`spectrum_spectrum_index` ASC, `spectrum_msrun_msrun_name` ASC, `spectrum_precursor_precursor_id` ASC);

您提到它在SQLite管理器中工作。我也无法复制,所以我想知道pysqlite2的版本(或其sqlite版本)是否存在问题,或者代码中其他地方是否存在一些副作用

你能发布pysqlite2及其sqlite的版本吗?我就是这样做的:

>>> from pysqlite2 import dbapi2 as sqlite
>>> sqlite.version
'2.3.5'
>>> sqlite.sqlite_version
'3.7.7.1'
更新

你能运行这个程序并让我知道你是否仍然有错误吗

#!/usr/bin/python
from pysqlite2 import dbapi2 as sqlite

conn = sqlite.connect(':memory:')
cu = conn.cursor()
cu.executescript("""
DROP TABLE IF EXISTS msrun;
CREATE  TABLE IF NOT EXISTS msrun (
  msrun_name VARCHAR(40) PRIMARY KEY NOT NULL ,
  description VARCHAR(500) NOT NULL );

DROP TABLE IF EXISTS feature;
CREATE  TABLE IF NOT EXISTS feature (
  feature_id VARCHAR(40) PRIMARY KEY NOT NULL ,
  msrun_msrun_name VARCHAR(40) NOT NULL ,
  CONSTRAINT fk_feature_msrun1
    FOREIGN KEY (msrun_msrun_name )
    REFERENCES msrun (msrun_name )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE UNIQUE INDEX id_UNIQUE ON feature (feature_id ASC);
  CREATE INDEX fk_feature_msrun1 ON feature (msrun_msrun_name ASC);

DROP TABLE IF EXISTS convexhull;
CREATE  TABLE IF NOT EXISTS convexhull (
  convexhull_id INT PRIMARY KEY NOT NULL ,
  mz DOUBLE NOT NULL ,
  rt DOUBLE NOT NULL ,
  feature_feature_id VARCHAR(40) NOT NULL ,
  CONSTRAINT fk_convexhull_feature
    FOREIGN KEY (feature_feature_id )
    REFERENCES feature (feature_id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX fk_convexhull_feature ON convexhull (feature_feature_id ASC);

DROP TABLE IF EXISTS position;
CREATE  TABLE IF NOT EXISTS position (
  position_id INT PRIMARY KEY NOT NULL ,
  dim0 INT NOT NULL ,
  dim1 INT NOT NULL ,
  feature_feature_id VARCHAR(40) NOT NULL ,
  CONSTRAINT fk_position_feature1
    FOREIGN KEY (feature_feature_id )
    REFERENCES feature (feature_id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX fk_position_feature1 ON position (feature_feature_id ASC);

DROP TABLE IF EXISTS userParam_names;
CREATE  TABLE IF NOT EXISTS userParam_names (
  userParam_id INT PRIMARY KEY NOT NULL ,
  Name VARCHAR(45) NOT NULL );

DROP TABLE IF EXISTS feature_has_userParam_names;
CREATE  TABLE IF NOT EXISTS feature_has_userParam_names (
  feature_feature_id VARCHAR(40) PRIMARY KEY NOT NULL ,
  userParam_names_userParam_id INT NOT NULL ,
  CONSTRAINT fk_feature_has_userParam_names_feature1
    FOREIGN KEY (feature_feature_id )
    REFERENCES feature (feature_id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT fk_feature_has_userParam_names_userParam_names1
    FOREIGN KEY (userParam_names_userParam_id )
    REFERENCES userParam_names (userParam_id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX fk_feature_has_userParam_names_userParam_names1 ON feature_has_userParam_names (userParam_names_userParam_id ASC);
  CREATE INDEX fk_feature_has_userParam_names_feature1 ON feature_has_userParam_names (feature_feature_id ASC);

DROP TABLE IF EXISTS userParam_value;
CREATE  TABLE IF NOT EXISTS userParam_value (
  iduserParam_value INT PRIMARY KEY NOT NULL ,
  userParam_name VARCHAR(45) NOT NULL ,
  value VARCHAR(45) NOT NULL );

DROP TABLE IF EXISTS feature_has_userParam_names_has_userParam_value;
CREATE  TABLE IF NOT EXISTS feature_has_userParam_names_has_userParam_value (
  feature_has_userParam_names_feature_feature_id VARCHAR(40) PRIMARY KEY NOT NULL ,
  feature_has_userParam_names_userParam_names_userParam_id INT NOT NULL ,
  userParam_value_iduserParam_value INT NOT NULL ,
  CONSTRAINT fk_feature_has_userParam_names_has_userParam_value_feature_ha1
    FOREIGN KEY (feature_has_userParam_names_feature_feature_id , feature_has_userParam_names_userParam_names_userParam_id )
    REFERENCES feature_has_userParam_names (feature_feature_id , userParam_names_userParam_id )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT fk_feature_has_userParam_names_has_userParam_value_userParam_1
    FOREIGN KEY (userParam_value_iduserParam_value )
    REFERENCES userParam_value (iduserParam_value )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

  CREATE INDEX fk_feature_has_userParam_names_has_userParam_value_userParam_1 ON  feature_has_userParam_names_has_userParam_value (userParam_value_iduserParam_value ASC);
  CREATE INDEX fk_feature_has_userParam_names_has_userParam_value_feature_ha1 ON  feature_has_userParam_names_has_userParam_value (feature_has_userParam_names_feature_feature_id ASC, feature_has_userParam_names_userParam_names_userParam_id ASC);
""")

conn.commit()
cu.execute("PRAGMA foreign_keys=ON")
cu.execute("INSERT INTO msrun VALUES (?,?)", ('bar', 'bar'))
cu.execute("INSERT INTO feature VALUES (?,?)", ('foo','bar'))
cu.execute("INSERT INTO feature VALUES (?,?)", ('foo1','bar'))
conn.commit()

cu.execute("SELECT * FROM feature")
print(cu.fetchall())

cu.execute("DELETE FROM feature WHERE feature_id=?", ("foo", ))
cu.execute("DELETE FROM feature WHERE feature_id=?", (str("foo1"), ))
conn.commit()

cu.execute("SELECT * FROM feature")
print(cu.fetchall())
更新2

事实上,您没有得到一些错误,应该排除
features
表及其依赖项根据您发布的模式存在任何问题。根据sqlite文档,我现在假设您在
features
表的任何子代/上升代中有一些其他外键,但您没有包括这些外键(例如,您没有提到的一些表依赖于您提到的一些依赖于
features

以下是让我相信的部分:

如果数据库架构包含外键错误,则需要 查看要识别的多个表定义,然后 创建表时未检测到错误。相反,这样 错误会阻止应用程序准备以下SQL语句: 以使用的方式修改子表或父表的内容 外键。更改内容时报告的错误为“DML错误” 模式更改时报告的错误是“DDL错误”。所以 换句话说,错误配置的外键约束需要 查看子级和父级都是DML错误。英国人 外键DML错误的语言错误消息通常为“外键” 键不匹配,但如果父表不匹配,也可以是“无此类表” 不存在

如果您没有注意到,您得到的错误与关于FK违规的错误不同:

pysqlite2.dbapi2.IntegrityError: foreign key constraint failed
更新3

您的问题在于
频谱的FK具有\u功能
引用不存在的
功能字段

CREATE  TABLE IF NOT EXISTS spectrum_has_feature (
<...>
FOREIGN KEY (feature_feature_id , feature_msrun_msrun_name )
REFERENCES feature (
    feature_id , 
    msrun_msrun_msrun_name ) -- <<< shouldn't this be msrun_msrun_name?
<...>
如果不存在,则创建表格频谱\u具有\u功能(
外键(功能\功能\ id、功能\运行\运行\名称)
参考特征(
特征标识,

msrun\u msrun\u msrun\u name)--我在更新到
Django==2.0
后登陆这里。 我所需要的修复方法是删除我用
Django==1.11.6
编写的所有迁移,并用
2.0
运行一个新的
makemigrations

当然,如果我有任何数据库托管我的应用程序,要求为发布的代码维护迁移文件,特别是易于重用的SQL格式,我就不可能做到这一点。你能确认你的create tables SQL完全相同吗?这两个表是一样的。我有更多的表,但我没有填充它们,所以我想它们是一样的ld是不必要的信息。其他表是否引用了这两个表中的任何一个?如果是,您也可以发布它们的架构吗?我会发布它,很遗憾,明天才能看到代码。感谢您的帮助:)sqlite.version:2.6.3 sqlite.sqlite\u version:3.7.10更新没有给出错误。我得到以下输出[(u'foo',u'bar'),(u'foo1',u'bar')][]单靠这一点是不够的,但我必须检查所有内容,以检查是否有任何其他遗漏,但我认为这应该可以解决它。谢谢希望我能给更多的+分
CREATE  TABLE IF NOT EXISTS spectrum_has_feature (
<...>
FOREIGN KEY (feature_feature_id , feature_msrun_msrun_name )
REFERENCES feature (
    feature_id , 
    msrun_msrun_msrun_name ) -- <<< shouldn't this be msrun_msrun_name?
<...>