mysql - Django 在将数据保存到模型中时显示错误 : django. db.utils.IntegrityError : (1048, "Column ' id' 不能为 null")

标签 mysql django python-3.5

我正在编写一个脚本,可以从不同的 API 中提取数据并将其存储到 MySQL 数据库中。该应用程序将从命令行运行。所以我只使用 Django 的 ORM。

但是当我创建一个没有主键但有一个名为 id 的列的模型时。当我尝试在此模型中保存数据时,出现错误django.db.utils.IntegrityError: (1048, "Column 'id' can not be null")

我真的很困惑为什么会发生这种情况。因为我从 API 中从 id 列获取值,并且没有机会获取该列的 null 或空值。

请告诉我我在这里做错了什么。

这是我的模型:

class Graphite(models.Model):

    class Meta:
        db_table = 'graphite'

    id = models.BigIntegerField()
    full_name = models.CharField(max_length=250, null=True)
    email = models.CharField(max_length=250, null=True)
    status = models.CharField(max_length=150, null=True)

这是我尝试在此模型中保存数据时的代码:

    Graphite.objects.using('database_name').create(
      id=row['id'],
      full_name=row['full_name'],
      email=row['email'],
      status=row['status'])

将数据保存到模型中时,我使用Graphite.objects.using('database_name')。因为我在此应用程序中连接了多个数据库。

最佳答案

嗯,我不确定你是否使用了 django 迁移,但它不会让你在 django 中创建这种模型,其中你的 id 属性(在模型中)没有主键作为其参数(mySQL)。那么为什么不直接定义:

class Graphite(models.Model):   

    class Meta:
        db_table = 'graphite'           

    id = models.BigIntegerField(primary_key=True)
    full_name = models.CharField(max_length=250, null=True)
    email = models.CharField(max_length=250, null=True)
    status = models.CharField(max_length=150, null=True)

所以在id上设置primary_key?那么创建Graphite时就不必传递id了.

但是

如果您必须提供id这是每个 Graphite 中您都需要拥有的东西model 并且它与主键不同,那么只需定义不同的东西,比方说 row_id 。但你应该还有最后一个 id模型中的属性 primary_key设置为True当你想要id时如BigIntegerField .

编辑(在示例中)

在 mySQL 中执行此命令:

ALTER TABLE graphite ADD COLUMN row_id BIGINT;

那么你的模型应该如下所示:

class Graphite(models.Model):   

    class Meta:
        db_table = 'graphite'           

    row_id = models.BigIntegerField()
    full_name = models.CharField(max_length=250, null=True)
    email = models.CharField(max_length=250, null=True)
    status = models.CharField(max_length=150, null=True)

及用法:

Graphite.objects.using('database_name').create(
  row_id=row['id'],
  full_name=row['full_name'],
  email=row['email'],
  status=row['status'])

就是这样。

关于mysql - Django 在将数据保存到模型中时显示错误 : django. db.utils.IntegrityError : (1048, "Column ' id' 不能为 null"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065692/

相关文章:

python - __await__ 是否需要成为生成器?

mysql - 内连接与不起作用的地方相结合

python - Django,抓取 : What's the best way to detect "changes" while scraping?

python - 如何使用 Python 3 在 MySQL 中避免 b' 和 UTF-8 文字

python - 如何在 django 中使用 ffmpeg 压缩 base64 解码的视频数据

python - 无法从 Eclipse 运行/调试 Django 的 manage.py

python - 无法使用 tkinter 取消绑定(bind)函数

mysql - Apache、MySQL 和干净的 URL 作为查询

重启后 MySQL 凭据被拒绝

php - 从数据库中获取数据时html网格显示错误