1

SQLiteデータベースがあります。この回答によると、私が持っているバージョン3.6.19+が必要です。SQLiteのバージョン3.7.10を使用して作成しました。

>>> from pysqlite2 import dbapi2 as sqlite
>>> print sqlite.sqlite_version
3.7.10

したがって、外部キーをサポートする必要があります。

私は次のsqliteデータベースcreateステートメントを持っています:

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で外部キーを強制するにはどうすればよいですか?

4

2 に答える 2

0

PRAGMAforeign_keysコマンドを使用してみてください。例えば:

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
于 2012-04-12T15:33:34.997 に答える
0

SQLiteのPRAGMA foreign_keys=ON;コマンドを使用してみてください。デフォルトでは無効になっています。

于 2012-04-12T15:30:58.600 に答える