我有一个 SQLite 数据库。根据这个答案,您需要我拥有的 3.6.19+ 版本。我使用 SQLite 3.7.10 版制作它:
>>> from pysqlite2 import dbapi2 as sqlite
>>> print sqlite.sqlite_version
3.7.10
所以它应该支持外键。
我有以下 sqlite 数据库创建语句:
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_id` )
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);
所以特征表中的msrun_msrun_name是msrun表中msrun_name的外键。但是,当我填写功能表时,我可以为 msrun_msrun_name 填写任何我想要的内容。未强制执行外键。
根据这个问题,需要打开强制执行,它给出了如何使用 SQLAlchemy 执行此操作的答案,但我没有使用 SQLAlchemy。
如何使用 pysqlite2 强制执行外键?