2012-04-12 2 views
1

SQLite 데이터베이스가 있습니다. this answer에 따르면 버전 3.6.19 이상이 필요합니다. SQLite 버전 3.7.10을 사용하여 만들었습니다.pysqlite2를 사용하여 파이썬에서 SQLite 외래 키를 적용하려면 어떻게해야합니까?

>>> 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에 대해 원하는 모든 것을 채울 수 있습니다. 외래 키가 적용되지 않습니다.

this question에 따르면 시행을 켜야 할 필요가 있으며 SQLAlchemy를 사용하여 응답을 제공하지만 SQLAlchemy를 사용하지는 않습니다.

pysqlite2로 외래 키를 적용하려면 어떻게해야합니까?

답변

0

SQLite의 PRAGMA foreign_keys=ON; 명령을 사용해보십시오. 기본적으로 비활성화되어 있습니다.

+1

또는 파이썬 cursor.execute를 ("ON PRAGMA의 foreign_keys =") –

0

foreign_keys 명령 PRAGMA을 사용해보십시오. 예를 들어 :

sqlite> PRAGMA foreign_keys = ON; 

는 외래 키가 현재 활성화 된 경우 찾습니다

sqlite> PRAGMA foreign_keys; 
0 
sqlite> PRAGMA foreign_keys = ON; 
sqlite> PRAGMA foreign_keys; 
1 
sqlite> PRAGMA foreign_keys = OFF; 
sqlite> PRAGMA foreign_keys; 
0 
관련 문제