关键问题是出在ForeignKey上,因为我们自定义了BigIntegerAutoField,将其数据类型设为了bigintAUTO_INCREMENT,在建立外键里,默认情况下这个数据类型也会直接返回,因此造成了tucao_reply表里有了两个自增的字段,这是mysql不允许的。因此我们就需要改变这种默认的逻辑,而参考系统中ForeignKey的实现,发现系统其实对于AutoField也是做了特殊处理的,相关代码可以参考Django的源代码,因此我也就照着这样的方式,扩展了ForeignKey,生成的SQL语句就没有问题了回复@渔樵耕读:总体来说,我觉得Django还是非常不错的,如果她还有些不完善,那我们也应该让她完善起来懂了。唉django还是不太完善啊。当然可以啊必须得是索引主键Bid没必要自增了吧,你都外键连到aid了外键肯定是可以自增的,这肯定是你的表结构写错了。你检查下你建数据的语句,大概忘了把自增字段设成主键了,也可能你在同一个表内多定义了一个自增字段。确实是一个表里两个自增字段了。一个是主键,一个是外键链接到另一个表里的主键取消B表中的外键aid的自增属性就没问题了,提示已经说得很清楚了嘛Django的话最好上代码,我还没有遇到过这样的情况代码贴上了。请注意TucaoReply中的tcId~fromdjango.dbimportmodelsfromfieldsimportBigIntegerAutoField#pythonmanage.pyschemamigrationauthoradd_mobile_column--auto执行model修改同步db的命令#pythonmanage.pymigrate提交同步dbclassTucao(models.Model):tcId=BigIntegerAutoField(primary_key=True,max_length=20,db_column='tucao_id',help_text='主键')tcUserId=models.BigIntegerField(blank=False,max_length=11,db_column='tucao_account_id',help_text='吐嘈者帐户id,未登录者为-1')tcAccountName=models.CharField(max_length=50,blank=False,db_column='tucao_account_name',help_text='吐嘈者昵称,匿名显示ip')tcAccountEmail=models.EmailField(max_length=50,blank=False,db_column='tucao_account_email',help_text='吐嘈者email')tcContext=models.TextField(max_length=160,blank=False,db_column='tucao_context',help_text='吐嘈内容')tcPic=models.CharField(max_length=1000,blank=True,db_column='tucao_pic',help_text='吐槽图片链接')classMeta:db_table='tucao'verbose_name='吐槽表'classTucaoReply(models.Model):tcReplyId=BigIntegerAutoField(primary_key=True,max_length=19,db_column='tucao_reply_id',help_text='回复主键')tcId=models.ForeignKey(Tucao,db_column='tucao_id',blank=True,null=True)tcReplyAccountId=models.BigIntegerField(blank=False,max_length=11,db_column='tucao_reply_account_id',help_text='回复者帐户id,未登录为-1')tcReplyAccountName=models.CharField(max_length=50,db_column='tucao_reply_account_name',blank=False,help_text='回复者昵称,匿名的话记录IP')tcReplyAccountEmail=models.EmailField(max_length=50,db_column='tucao_reply_account_email',blank=False,help_text='如果未登录回复,需要记录邮箱')tcReplyContext=models.TextField(max_length=160,blank=False,db_column='tucao_reply_context',help_text='回复内容')tcReplyDate=models.DateTimeField(db_column='tucao_replay_datetime',help_text='回复时间')classMeta:db_table='tucao_reply'verbose_name='吐槽回复表'回复@晴风晓月:把这个类型换成BigInteger也会报错。。。奇了怪了。回复@渔樵耕读:你这个BigIntegerAutoField应该是你自己扩展的吧,我在Django的文档里没有找到,你看一下扩展有没有问题呢?回复@晴风晓月:BigIntegerAutoField只是想让BigInt类型的主键自增。回复@渔樵耕读:应该是BigIntegerAutoField有问题回复@晴风晓月:难道外键不能指定字段名???

我想我已经把问题解决了。

首先我自己将实现的BigIntegerAutoField如下所示:

classBigIntegerAutoField(models.BigIntegerField):defdb_type(self,connection):if'mysql'inconnection.class.module:return'bigintAUTO_INCREMENT'returnsuper(BigIntegerAutoField,self).db_type(connection)由于改变了相应的数据类型,因此改写ForeignKey为如下代码:classBigIntegerForeignKey(models.ForeignKey):def__init(self,to,to_field=None,**kwargs):super(BigIntegerForeignKey,self).

init(to,**kwargs)defdb_type(self,connection):rel_field=self.rel.get_related_field()ifisinstance(rel_field,BigIntegerAutoField):returnmodels.BigIntegerField().db_type(connection=connection)returnrel_field.db_type(connection=connection)

然后将第19行代码改写如下:

tcId=BigIntegerForeignKey(Tucao,db_column='tucao_id',blank=True,null=True)

这样就没有问题了。

3Q~~~还帮我写了代码。不过我想弄清楚。我之前那么写为什么不行呢。我的BigIntegerAutoField的代码就是按照你那么写的。最佳答案好评

嘛,这个应该是数据库设计上的失误啊....回复表里加上一个回复的tucao的id?回复@伊藤熊吉:应该是回复表增加一个字段作为外键关联吐槽表~我寻思自己加上就得了。。没跟你说。。回复@渔樵耕读:确实是我设计上的失误,看邮件,你看看,如果没问题的话我就改没有失误啊!吐槽-回复是1-N的关系啊。所以回复表里肯定会吐槽的外键啊。不然怎么找到回复是属于哪一个吐槽里的信息。

mysql数据库表关联和django_django 数据库表关联相关推荐

  1. Mysql数据库基本操作(七)多表查询-子查询,表自身关联查询

    多表查询还有前面的两块内容--内连接查询,外连接查询,希望看到这篇博客的朋友先去看看我的"Mysql数据库"专栏中Mysql数据库基本操作(六)多表查询-内连接,外连接这一章博客, ...

  2. Mysql数据库使用:学生选课系统,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表。

    Mysql数据库使用 练习内容:主要针对学生选课系统而设计,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表. 学生表主要用于存储学生信息,包括姓名,性别,地址,电话等信息 课程表主要用 ...

  3. mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...

    最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 ...

  4. Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解

    文章目录 内连接 inner join 示例 外连接 outer join left outer join 左外连接 示例 right outer join 右外连接 示例 full outer jo ...

  5. 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库

    前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...

  6. mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记

    ###数据库 之前通过流去操作文件保存数据库的弊端: 1.执行效率低 2.开发成本高 3.一般只能保存小量数据 4.只能保存文本数据 ####什么是DB - DataBase 数据库:代表文件集合 # ...

  7. phpstudy mysql创建表_MySQL_Mysql入门基础 数据库创建篇,1.创建数据表---基础(高手跳 - phpStudy...

    Mysql入门基础 数据库创建篇 1.创建数据表---基础(高手跳过) 正统方法:create [TEMPORARY] table 表名 [if not exists] (创建的列项定义) [表的选项 ...

  8. MySQL将表中的yes改成no_mysql在不需要改程序的情况下通过操作数据库对单表数据量大的表进行分表...

    1.为什么要分表? 数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询速度变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql中有一种机制是表锁定和行锁定, ...

  9. mysql分布式数据库架构_MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程...

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  10. mysql多字段分库分表基因码_mysql数据库优化方案之分库分表,轻松解决亿级数据问题...

    今天介绍下sharding-sphere,主要介绍他的特性,分库分表的技术的详解. (一)下载源码官网地址获取源码https://shardingsphere.apache.org/index_zh. ...

最新文章

  1. Linux内核初期内存管理---memblock(转)
  2. 112页数学知识整理!机器学习-数学基础回顾.pptx
  3. 【Java24】健康项目:环境搭建,预约管理(检查项和检查组管理)
  4. String.prototype.substr()
  5. Window捕获消息机制及动态创建button-MFC
  6. 前端学习(1110):this指向问题
  7. C++基础与深度解析第一章:C++初探笔记
  8. cv方向有哪些_计算机视觉(CV)与交通的千丝万缕
  9. Antlr中文文档初稿2(《ANTLR树分析器》)
  10. DPDK初始化分析(三)
  11. 计算机组成原理 精选习题集
  12. Android Binder机制
  13. tampermonkey油猴实现自动定时刷新页面,刷访问量
  14. 我二刷以上的网文小说,本本经典,值得推荐
  15. 即将到来的交通革命——出行即服务(MaaS)
  16. android游戏工作心得体会,幼儿园游戏的心得体会(精选6篇)
  17. 【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0
  18. 计算机与交换机基础配置入门,新手入门篇:交换机配置窍门深入学习 -电脑资料...
  19. 组合数学之二 —— 容斥原理及应用
  20. Win10关闭自动调节亮度问题

热门文章

  1. 计算机二级什么叫项目符号,项目符号
  2. 图像尺寸与图像像素、分辨率的关系
  3. Iexplore.exe[XXXX]中发生未处理的win32异常”解决办法
  4. 【书评】《技术垄断:文明向技术投降》
  5. 阿里大厂面试:2亿条数据需要缓存,如何设计这个存储方案?
  6. GT-P3110如何root
  7. alpha 冲刺 —— 十分之一
  8. 中国五大城市PM2.5数据分析
  9. 电脑仙人掌机器人作文_蜗牛、仙人掌、电脑、雪人、机器人、蚕宝宝、大象选三到四个词作文...
  10. 开源APM性能检测系统技术选型与架构实战