#きっかけ
on_deleteにCASCADEを指定したのに参照先レコードを削除しても一緒に消えてくれない...
models.py
import peewee
DB_FILE = "application.db"
db = peewee.SqliteDatabase(DB_FILE)
class User(peewee.Model):
no = peewee.AutoField()
name = peewee.CharField(unique=True)
class Meta:
database = db
class Devices(peewee.Model):
no = peewee.AutoField()
id = peewee.CharField(unique=True)
owner = peewee.ForeignKeyField(User, on_delete='CASCADE', related_name='devices')
class Meta:
database = db
#結論
どうやらSQliteでは外部キーがデフォルトでオフになっているらしく手動でオンにする必要があるみたい
どういう意図なんだろう...
参考
SQLiteで外字キー設定する
http://d.hatena.ne.jp/watanata2000/20110224/1298524729
確かにコンソールで確認するとオフになっていた
sqlite> PRAGMA foreign_keys;
foreign_keys = 0
ドキュメントを確認するとPweeweeで外部キーを有効にする方法は以下
db = SqliteDatabase('my_app.db', pragmas={
'foreign_keys': 1,
})
db.pragma('foreign_keys', 1, permanent=True)
後者を選択
models.py
import peewee
DB_FILE = "application.db"
db = peewee.SqliteDatabase(DB_FILE)
db.pragma('foreign_keys', 1, permanent=True)
再びコンソールで確認したが設定は反映されず
sqlite> PRAGMA foreign_keys;
foreign_keys = 0
ただ、アプリケーション上では正しく外部キーが機能することを確認
DBファイルには設定が残らず、接続時の設定として管理されているんだろうか