Django テストで マイグレーションをキャンセルした時 table already exists で止まらないようにする

(Comments)

Django==1.9.13
Mezzanine==4.3.0

Django Mezzanine Cartridge のテストで マイグレーションをキャンセルした時

settingsに

if 'test' in sys.argv:
CAPTCHA_TEST_MODE = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
},
}
DATABASE_ROUTERS = []

class DisableMigrations(object):
def __contains__(self, item):
return True

def __getitem__(self, item):
return 'notmigrations'

MIGRATION_MODULES = DisableMigrations()

こんな感じに書いてやってたのですが、

ManyToManyフィールドの trouth= がらみの問題で、table already exists で create teable が止まってテストができなくなってました。

なので、BaseDatabaseSchemaEditor の CREATE TABLE 文をパッチして CREATE TABLE IF NOT EXISTS にすれば止まらずに実行できます。

from django.db.backends.sqlite3.schema import DatabaseSchemaEditor

# CREATE TABLE をパッチ
DatabaseSchemaEditor.sql_create_table = \
"CREATE TABLE IF NOT EXISTS %(table)s (%(definition)s)"
DatabaseSchemaEditor.sql_create_index = \
"CREATE INDEX IF NOT EXISTS %(name)s ON %(table)s (%(columns)s)%(extra)s"
DatabaseSchemaEditor.sql_create_unique = \
"CREATE UNIQUE INDEX IF NOT EXISTS %(name)s ON %(table)s (%(columns)s)"

django.db.utils.DatabaseErrorWrapper をパッチして、エラーを握りつぶしてもいいかもしれない

Currently unrated

Comments

Recent Tweets

  • 大坂昌彦

    大坂昌彦 @masahiko_osaka

    ytyng

    ついに犯人がわかってしまいました! ナル、一昨日にも僕だったので、昨日の人しかいません!! ペダルにガムテープ貼っても良いけど、剥がして帰って欲しい。散々、自分の足で踏みつけたガムテープを何で次の人が剥がさなきゃならないの??自分… https://t.co/Contz66ZK9
    1 month ago

  • ytyng

    ytyng @ytyng

    Shopify の在庫数更新API GraphQLの場合: 一括更新できる 絶対値更新できない REST API の場合: 一括更新できない 絶対値更新できる なんなのそれ https://t.co/0QyibNQXdt
    1 month, 3 weeks ago

  • ytyng

    ytyng @ytyng

    #bulma スペーシングヘルパー、マージされてる! もうこれBootstrapじゃん https://t.co/uI8fZ6lAOw
    1 month, 3 weeks ago

Recent Posts

Archive

2020
2019
2018
2017
2016
2015
2014
2013
2012
2011

Categories

Authors

Feeds

RSS / Atom