2012-04-12 7 views
1

私はSQLiteデータベースを持っています。 this answerによれば、私は持っているバージョン3.6.19+が必要です。 SQLiteのバージョン3.7.10を使用して作成しました。pysqlite2を使ってPythonで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

やPythonのcursor.execute( "プラグマFOREIGN_KEYS = ON")に:例:外部キーが現在有効になっている場合

sqlite> PRAGMA foreign_keys = ON; 

はその後に見えます –

0

foreign_keysコマンドPRAGMAを試してください。

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 
関連する問題