我正在尝试应用迁移,但出现错误:
django.db.utils.OperationalError:(1050,“表'customers_customer'已经存在”)
我通过发出以下命令来获取此信息:
python manage.py migrate
我的客户表已经存在,那么该怎么做才能让迁移知道这一点,而不是出错,然后对模型进行修改?
我在本地环境的本地数据库上运行了此文件,没有任何问题。当我将数据库指向生产环境并在migrate
上面运行时,出现此错误。
我正在尝试应用迁移,但出现错误:
django.db.utils.OperationalError:(1050,“表'customers_customer'已经存在”)
我通过发出以下命令来获取此信息:
python manage.py migrate
我的客户表已经存在,那么该怎么做才能让迁移知道这一点,而不是出错,然后对模型进行修改?
我在本地环境的本地数据库上运行了此文件,没有任何问题。当我将数据库指向生产环境并在migrate
上面运行时,出现此错误。
Answers:
如果在数据库中创建了表,则可以运行
python manage.py migrate --fake <appname>
将迁移标记为已运行,而无需实际运行
或者,如果要避免迁移中的某些操作,则可以编辑app / migrations目录下的迁移文件,并注释在迁移执行过程中不想执行的操作。
文件: https //docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south
或python manage.py help migrate
它实际上 python manage.py migrate --fake <appname>
我们可以通过答案中提到的两种方式解决此问题:1.)通过在迁移文件中进行编辑
我们在创建的每个应用程序中都创建了migrations文件夹,在这些迁移文件夹中,首先创建了迁移文件(最初创建了0001_initial.py,之后将创建所有与该初始文件有关的其他文件),当我们运行python manage.py时迁移,对于每个APP,如果文件有更改,则将应用迁移文件。在migration命令之后,我们可以看到此运行正在“在终端上应用”。如果迁移文件中有任何问题,我们将在此时使用此错误。就我/我们而言:
Applying ValetUser.0002_keyroundslots_systemparameters_vehicleparking_vehicleparkingdetails...Traceback (most recent call last):
sqlite3.OperationalError: table "valet_keyroundslots" already exists
在这里,我们可以注意到提到了存在问题的文件,即ValetUser.0002_keyroundslots_systemparameters,因此我们可以转到应用,然后进行迁移,并且在0002文件中,我们可以注释该特定模型所面临的问题的CreateModel操作,而应用迁移。例:
operations = [
# migrations.CreateModel(
# name='KeyRoundSlots',
# fields=[
# ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
# ('key_round', models.IntegerField()),
# ('key_slot', models.IntegerField()),
# ('is_available', models.BooleanField()),
# ('Valet_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='valet_location', to='ValetUser.ValetAt')),
# ],
# options={
# 'db_table': 'valet_keyroundslots',
# },
# ),
2.)通过对我们面临错误/问题的特定APP的修改后的迁移文件应用假迁移,--fake将应用假迁移,该假迁移不会影响已经应用的模型迁移。
python manage.py migrate --fake <appname>
Waqas和elmonkeylp给出的答案也是正确的,我只想在我们用于场景的帮助下简单地解释一下