2016-04-15 35 views
2

FlaskでSQLAlchemyを使用してデータベーステーブルを作成しています - すべてのテーブルに少なくとも1つの外部キーがあります - SQLではなくSQLで動作します - MySQLのテーブル(子テーブルの作成時に親テーブルは作成されません)。私は問題を解決するために "SET foreign_key_checks = 0"を使用しますが、sqliteでは動作しません。外部キーのチェックを無視するようにSQLAlchemyを設定する方法はありますか?MySQLの "SET foreign_key_checks = 0"のSQLAlchemy設定

+0

sqliteはデフォルトで外部キーを強制しません。 – univerio

+1

これは、あなたが実際に尋ねているように聞こえる* SQLAlchemy **を構成してMySQL **に外部キーチェックを無視するようにする方法はありますか?*(同時にsqliteと互換性がない) –

答えて

0

まず、なぜ外部キー制約を無視したいのですか?外部キーを定義すると、外部表と列名を含む文字列を渡すことができます。外部表がまだ作成されていない場合でも、それらは正しく解決されます。

いずれの場合でも、強制されていない外部キーを使用する場合は、外部キー列を外部キーとして定義しないでください。単純な列として定義し、外部キーの依存関係を自分で管理してください。私の意見では良い考えではありませんが、それはできます。

+0

"SET foreign_key_checks = 0"を追加しないと、MySQLを使用したアップグレードを使用してdb migrateスクリプトを実行しているときにテーブルを作成できません。私は理解していない "外部キーを定義すると、外部テーブルとカラム名を持つ文字列を渡すことができます"、これは私が外部キーを定義する方法です:class Author(db.Model): ... paper_id = db .Column(db.Integer、db.ForeignKey( 'papers.id')) – harryw

+0

@harryw同じ移行の中に 'papers'テーブルがありますか? – Miguel

+0

はい、しかし、authorsテーブルは、後で論文を作成することなく、移行スクリプトで最初に作成されるものです。これはsqliteでは問題ありませんが、mysqlでは問題ありません。どうも! – harryw

0

ユーザmysqlを使用している場合は、mysqlに接続し、SETグローバルを使用できます。FOREIGN_KEY_CHECKS = 0; と削除するdbテーブルを削除します。再度SET FOREIGN_KEY_CHECKS = 1;この値は外部関係のdbテーブルをチェックすることを可能にします

関連する問題