0
点赞
收藏
分享

微信扫一扫

用migrate将映像数据写入数据库常见问题01

django开发时,models.py文件创建正常,makemigrations也正常,但migrate却提示没有需要迁移的数据,查看sqlite数据库也没有建立相应的数据表。

相关文件

# coding:utf-8
# file-name:models.py

from django.db import models
class Department(models.Model):
	'''部门表'''
	title = models.CharField(verbose_name='标题',max_length=16)

	def __str__(self):
		return self.title

class Admin(models.Model):
	'''员工表'''
	username = models.CharField(verbose_name='姓名',max_length=32)
	password = models.CharField(verbose_name='密码',max_length=64)
	gender = models.IntegerField(verbose_name='性别',choices=[(1,"男"),(2,'女')],default=1)
	age = models.PositiveIntegerField(verbose_name='年龄',null=True,blank=True)
	depart = models.ForeignKey(verbose_name='部门',to='Department',on_delete=models.CASCADE)


class Phone(models.Model):
	'''号码表'''
	mobile = models.CharField(verbose_name='号码',max_length=11)

	price = models.PositiveIntegerField(verbose_name='价格',default=0)

	level = models.SmallIntegerField(
									verbose_name='级别',
									choices=[
										(1,'1级'),
										(2,'2级'),
										(3,'3级'),
										(4,'4级'),
									],
									default=1
									)

	status_choice =[
		(1,'已使用'),
		(2,'未使用'),
	]
	status = models.SmallIntegerField(verbose_name='状态',choices=status_choice,default=2)

	admin = models.ForeignKey(verbose_name='管理员',to='Admin',on_delete=models.CASCADE)



class Yonghu(models.Model):
	username = models.CharField(verbose_name='用户',max_length=8)
	password = models.CharField(verbose_name='密码',max_length=16)


class Yuangong(models.Model):
	name = models.CharField(verbose_name='姓名',max_length=8)
	gender = models.SmallIntegerField(verbose_name='性别',choices=[(1,'男'),(2,'女')],default=1)
	age = models.SmallIntegerField(verbose_name='年龄',null=True,blank=True)
	nation=models.CharField(verbose_name='民族',max_length=10)
	unit=models.CharField(verbose_name='单位',max_length=32)

所见问题

在widows窗口下运行makemigrations命令,显示结果如下:

用migrate将映像数据写入数据库常见问题01_数据

后台生成映像文件0001_initial.py

# Generated by Django 4.1.5 on 2023-10-30 10:27

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Admin',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('username', models.CharField(max_length=32, verbose_name='姓名')),
                ('password', models.CharField(max_length=64, verbose_name='密码')),
                ('gender', models.IntegerField(choices=[(1, '男'), (2, '女')], default=1, verbose_name='性别')),
                ('age', models.PositiveIntegerField(blank=True, null=True, verbose_name='年龄')),
            ],
        ),
        migrations.CreateModel(
            name='Department',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=16, verbose_name='标题')),
            ],
        ),
        migrations.CreateModel(
            name='Yonghu',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('username', models.CharField(max_length=8, verbose_name='用户')),
                ('password', models.CharField(max_length=16, verbose_name='密码')),
            ],
        ),
        migrations.CreateModel(
            name='Yuangong',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=8, verbose_name='姓名')),
                ('gender', models.SmallIntegerField(choices=[(1, '男'), (2, '女')], default=1, verbose_name='性别')),
                ('age', models.SmallIntegerField(blank=True, null=True, verbose_name='年龄')),
                ('nation', models.CharField(max_length=10, verbose_name='民族')),
                ('unit', models.CharField(max_length=32, verbose_name='单位')),
            ],
        ),
        migrations.CreateModel(
            name='Phone',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('mobile', models.CharField(max_length=11, verbose_name='号码')),
                ('price', models.PositiveIntegerField(default=0, verbose_name='价格')),
                ('level', models.SmallIntegerField(choices=[(1, '1级'), (2, '2级'), (3, '3级'), (4, '4级')], default=1, verbose_name='级别')),
                ('status', models.SmallIntegerField(choices=[(1, '已使用'), (2, '未使用')], default=2, verbose_name='状态')),
                ('admin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.admin', verbose_name='管理员')),
            ],
        ),
        migrations.AddField(
            model_name='admin',
            name='depart',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.department', verbose_name='部门'),
        ),
    ]

在windows窗口下运行migrate命令,用镜像数据在数据库创建相应的数据表

用migrate将映像数据写入数据库常见问题01_django_02

我们会发现系统提示们没有需要迁移的新数据。但数据库里在migrate前后都没有生成与之相关的数据表

用migrate将映像数据写入数据库常见问题01_django_03

解决方案

这个现象一般并不是代码有影响正常运行的问题,主要原因是之前手动在数据库中删除了映射数据对应的数据表,再次运行makemigrations和migrate命令时,migrate判断不了之前生成的数据表已被手动删除,所以反馈操作结果为没有需要写入的映射数据。这时如果还没有写入除列名外的其他数据,最省心的办法就是把数据库文件整体删除,然后再运行migrate命令,即可正常写入相关数据表。运行结果如下:

用migrate将映像数据写入数据库常见问题01_数据_04

数据库显示信息:

用migrate将映像数据写入数据库常见问题01_django_05


举报

相关推荐

0 条评论