2017-02-15 6 views
1

私はpy.testを呼び出すと実行されるテストでdjangoプロジェクトを持っていますが、最近は外部キー制約をチェックしていません。どのようにして外部キー制約をチェックすることができますか?sqlliteを使用してpytestで外部キーチェックを有効にする方法

明らかに、foreign key constraints weren't even possible until sqlite 3ですが、私はsqlite用のcliを持っていないので、実際に実行しているバージョンはわかりませんが、ちょうどdjangoによって自動的にインクルードされていますか? (私はdjango 1.9.10を使用しています)、sqlite 3は2009年にリリースされました。

おそらくit must still be enabled by the application at runtime, using the PRAGMA foreign_keys command.ですが、私のテストでそのようにする方法はわかりません。

[UPDATE] それで、sqliteはそのままの状態でチェックしていないようです。

class Referenced(models.Model): 
    pass 

class Referencer(models.Model): 
    fk = models.ForeignKey(Referenced) 

>>> Referencer.objects.create(fk_id=-1) 
<Referencer> 
>>> Referencer.objects.all()[0].fk 
DoesNotExist 

答えて

0

この問題を解決するためのパッケージを作成しました。

pip install sqlite_checkforeignkeys 

、データベースを設定します。

DATABASES = { 
    'default': { 
     'ENGINE': 'sqlite_checkforeignkeys_engine', 
     'TEST': {'NAME': ':memory:'}, 
    } 
} 

それは外部キーsqlite3のと

0

Pythonの船を強制するために、既存のSQLiteエンジンを書き換える関与。あなたはPRAGMA文を設定すると

import sqlite3 
sqlite3.sqlite3.sqlite_version 

してバージョンを確認して、それが使用するドライバに依存してもよい、とwheterあなたはORMを使用しています。 peewee

、あなたは多くの使用

db = SqliteDatabase('my_app.db', pragmas=(('foreign_keys', 'on'))) 
関連する問題