MySQL数据库中指定的两个主键

2023-11-22

我正在尝试创建一个测试数据库,它是预先存在的数据库的副本。我正在使用 Django 模型(理论上是与原始数据库一起使用的模型)来执行此操作。我最近从其他人那里继承了代码,并试图弄清楚代码到底发生了什么。

在该模型中,其中一个表有两列标识为主键。

        column1 = models.IntegerField(primary_key = True)
        column2 = models.IntegerField(primary_key = True)
        column3 = models.CharField(max_length = 30)

当我尝试将此模型同步到测试数据库时 - 发生错误:

文件“/somePathHere/MySQLdb/connections.py”,第 36 行,在 defaulterrorhandler 中引发错误类、错误值 _mysql_exceptions.OperationalError:(1068,'定义了多个主键')

它写在Django 文档Django 不允许多个主键。然而,看看输出DESCRIBE [tablename]在原始 MySQL 数据库中,看起来这正是这里发生的事情:

        +------------+------------+------+-----+---------+-------+
        | Field      | Type       | Null | Key | Default | Extra |
        +------------+------------+------+-----+---------+-------+
        | IDENTIFIER | bigint(20) | NO   | PRI | NULL    |       |
        | TIMESTAMP_ | bigint(20) | NO   | PRI | NULL    |       |
        | VALUE_     | longtext   | YES  |     | NULL    |       |
        +------------+------------+------+-----+---------+-------+

请注意,IDENTIFIER 和 TIMESTAMP_ 都被列为主键。

我看到很多关于SO的话题(实施例1 , 实施例2, and 实施例3)关于基于多列创建主键 - 我看到的是复合键吗?在这种情况下,如何通过 Django 模型进行转发,即如何复制它?

如果不是复合键,那它是什么?


Django 不支持它,但有一个解决方法。在您的模型上指定 unique_together 和 Meta 部分中的字段:

class MyClass(models.Model):
    IDENTIFIER = models.IntegerField(blank=False,null=False)
    TIMESTAMP_ = models.IntegerField(blank=False,null=False)
    VALUE_ = models.TextField(blank=True, null=True)

    class Meta:
        unique_together = ('IDENTIFIER', 'TIMESTAMP_')

这将保留两列主键行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库中指定的两个主键 的相关文章

随机推荐

  • 如何从 Chrome 扩展程序打开 mailto: 链接?

    我有一个名为 URL 缩短 的 Chrome 扩展程序Shrtr 目前 它允许用户将缩短的 URL 复制到剪贴板 但在下一个版本中 我添加了使用电子邮件发送缩短的 URL 的功能mailto 链接 即mailto subject
  • Django 添加占位符到 django 内置登录表单

    我正在使用 django 内置登录forms我想在用户名和密码中添加占位符 我的模板 div class form group div class col md 12 form username add class form control
  • Android Market - 上传 APK 文件时出错

    刚才我已经开发了一个应用程序 现在我准备将其上传到Android市场 但是当我尝试上传时 它显示以下错误消息 市场不接受使用调试证书签名的 apk 创建有效期至少 50 年的新证书 Market 要求用于签署 apk 的证书至少在 2033
  • 序列化 .net 对象并省略文档类型?

    我编写了一些 net 代码来使用 XMLSerializer 类序列化对象 public static string serialize object o Type type o GetType System Xml Serializati
  • Jquery - 不可滚动 div 上的滚动事件

    example http jsbin com ofiy 2 edit preview 我尝试用不可滚动的div 绿色的 滚动一个div 红色的 我的问题是 当我在绿色 div 上滚动时 jqueryscroll 不着火 HTML div s
  • 当 rpm 文件中存在用于 rpm 安装的“缺少”lib 时

    我正在为 centos 生成一个 rpm 文件 但是当我尝试在干净的机器上安装它时 它失败了 gt Running transaction check gt Package grass x86 64 0 6 4 4 1 el6 will b
  • Facebook 登录无法在 Safari/ iPhone 中打开

    我正在创建一个显示 Facebook 好友的应用程序 首先 用户需要单击登录按钮 然后在填写登录 ID 和密码后会出现一个简单的弹出屏幕 其中将显示好友列表 一切正常 可以在 Firefox Chrome IE 上运行 但不会在 Safar
  • Apache POI - 使用 XSSFWorkbok + servlet 响应

    我的 java 应用程序在启用下载 XLSX 文件时遇到问题 按照此链接中显示的示例 使用 Apache POI 创建 excel 文件供用户下载 我尝试了两种配置来下载 保存电子表格 首先使用 XLS 文件 response setCon
  • Java/JavaScript 日期:这是真的吗?

    假设用户在与应用程序服务器不同的时区通过浏览器运行我的 Web 应用程序 我使用 JavaScript 在客户端序列化日期date getTime 方法 我通过 Json 发送结果毫秒 然后通过调用在服务器端创建一个 Java Date 对
  • UITextField - 仅允许数字和标点输入/键盘

    我已经尝试过下面的代码 但只允许输入键盘上的数字 我的应用程序要求键盘使用句号 句号 用于金钱交易 我尝试的代码是 BOOL textField UITextField textField shouldChangeCharactersInR
  • Spark 作业因 java.io.NotSerializedException: org.apache.spark.SparkContext 失败

    当我尝试应用方法 ComputeDwt 时 我遇到了上述异常RDD Int ArrayBuffer Int Double 输入 我什至正在使用extends Serialization在 Spark 中序列化对象的选项 这是代码片段 inp
  • 将 MvxCommand 与 CommandParameter 绑定结合使用

    我正在尝试用火MvxCommand 与 CommandParameter 但面临以下问题 MyView axml 包含
  • 如何在 XCode 中使用 ARM 汇编器?

    出于教育目的 我想向现有的 iPhone 应用程序添加一个用 ARM 汇编语言编写的函数 一般来说 我不需要 ARM 汇编教程 因为我已经读了太多了 我只是不知道如何实际运行代码 我想做的是这样的 无用 h void useless 无用
  • 无法将图像渲染到 HttpContext.Response.OutputStream

    基本上我试图在 ASP NET 处理程序中渲染一个简单的图像 public void ProcessRequest HttpContext context Bitmap image new Bitmap 16 16 Graphics gra
  • Android:根据给定的 id 获取列表视图中项目的位置:

    getItemIdAtPosition 是android中的一个函数 用于获取列表视图中给定项目的位置的id 有什么方法可以做相反的事情 即获取项目的位置是给定其 id 的列表视图吗 不可以 你必须手动完成 在您正在使用的适配器中创建一个公
  • 使用 linq 按范围分组[重复]

    这个问题在这里已经有答案了 我们如何使用等于或大于的分组范围 var data new new Id 0 Price 2 new Id 1 Price 10 new Id 2 Price 30 new Id 3 Price 50 new I
  • 错误:“您在短时间内创建或删除了太多日历或日历事件。”

    第一次在这里提问 我构建了一个 Google 应用程序脚本 它从 Google 表格获取事件信息 并基于以下内容在 Google 日历上创建事件 Mogsdad 的回答在这里 由于我不存在的声誉 我无法在该线程上发布问题 exportEve
  • 使用vue js和axios上传多个文件

    我正在尝试使用 vuejs 和 axios 上传多个图像 但在服务器端我得到空对象 我在标头中添加了 multipart form data 但仍然是空对象 submitFiles Initialize the form data let
  • 将整数转换为日期

    我在将整数日期 20180525 转换为 YYYY MM DD 格式的日期时遇到问题 有没有办法做到这一点 或者我应该将其转换为代码 在本例中为Java 任何对此的帮助将不胜感激 谢谢你 如果您的日期以 YYYYMMDD 形式存储为整数 则
  • MySQL数据库中指定的两个主键

    我正在尝试创建一个测试数据库 它是预先存在的数据库的副本 我正在使用 Django 模型 理论上是与原始数据库一起使用的模型 来执行此操作 我最近从其他人那里继承了代码 并试图弄清楚代码到底发生了什么 在该模型中 其中一个表有两列标识为主键