当前位置: 首页 > news >正文

python怎样进行主键合并_如何在Djang中为我的模型设置两个主键字段

如果您应该在旧数据库上使用django,则不能修改数据库模式

有一个解决方法(丑陋的)来解决这个问题

覆盖模型保存或删除功能# use raw sql statement to save or delete object

class BaseModel(models.Model):

def get_max_length_unique_key(self):

max_len_unique_key = []

for unique_key in self._meta.unique_together:

if len(unique_key) > len(max_len_unique_key):

max_len_unique_key = unique_key

return max_len_unique_key

def get_db_conn(self):

db_cnn = DbManage(db_ip, db_port, DATABASES_USER, DATABASES_PASSWORD, self._meta.db_table)

db_cnn.connect()

return db_cnn

def save(self, *args, **kwargs):

self.delete()

cnn, databasename = self.get_db_conn()

update_tables = self._meta.db_table

key_list = ""

values_list = ""

for field in self._meta.fields:

key_list += "%s," % field.name

values_list += "\'%s\'," % str(getattr(self, field.name))

key_list = key_list[:len(key_list) - 1]

values_list = values_list[:len(values_list) - 1]

sql = "insert into %s(%s) values(%s)" % (update_tables, key_list, values_list)

logger.info("insert new record to %s" % databasename)

cnn.excute_sql(sql)

cnn.close()

def delete(self, *args, **kwargs):

cnn = self.get_db_conn()

update_tables = self._meta.db_table

sql = "delete from %s where " % update_tables

for uk in self.get_max_length_unique_key():

sql += "%s=\'%s\' and " % (uk, getattr(self, uk))

sql = sql[:len(sql) - 4]

logger.info("delete record from %s" % update_tables)

cnn.excute_sql(sql)

cnn.close()

pass

class Meta:

abstract = True

class ImageList(BaseModel):

field1 = models.CharField(primary_key=True, max_length=30)

field2 = models.CharField(primary_key=True, max_length=30)

field3 = models.CharField(primary_key=True, max_length=30)

body = models.CharField(max_length=2000, blank=True, null=True)

updated_on = models.DateTimeField(blank=True, null=True)

class Meta:

managed = True

db_table = 'image_list'

unique_together = (('field1', 'field2', 'field3'),)

相关文章:

  • python捕捉warning_python – 捕获OptimizeWarning作为例外
  • python 复制图片到剪贴板_JS实现将图片复制到剪贴板
  • 马斯洛需求的五个层次_如何合理满足孩子需求?善用马斯洛需求层次理论,你也是聪明家长...
  • python调用api做用户登录认证_Python构建RESTful网络服务[Django篇:用户接入控制,认证与权限]...
  • pythonocc安装_PythonOCC开发-如何搭建开发环境和一个创建圆台例子
  • python怎么找到视频教程_哪里能找到 Python 视频教程地址?
  • mybatis嵌套子查询_InfluxDB常见问题和解答 - 如何在InfluxDB中实现嵌套子查询
  • select子查询返回 值_从零学会SQL:复杂查询,D4
  • python concat axis_Python NumPy中sum()函数详解 axis与keepdims图解
  • python echarts mysql_Django中从mysql数据库中获取数据传到echarts方式
  • skywalking原理_链路追踪 SkyWalking 源码分析——Collector Naming Server 命名服务
  • python print 调试_python 调试: print / assert / logging / pdb
  • 信息系统项目管理师论文_高级软考信息系统项目管理师考试技巧之论文摘要
  • imp oracle reschema_Oracle数据库逻辑备份之exp/imp(一)
  • aspnet是前端还是后端_谁能解释一下“前端开发”与“.NET”有什么区别和联系...
  • CAP 一致性协议及应用解析
  • eclipse(luna)创建web工程
  • ES6--对象的扩展
  • ES6核心特性
  • Golang-长连接-状态推送
  • Hexo+码云+git快速搭建免费的静态Blog
  • scala基础语法(二)
  • SQLServer插入数据
  • vue数据传递--我有特殊的实现技巧
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 聊聊sentinel的DegradeSlot
  • 全栈开发——Linux
  • 想写好前端,先练好内功
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​比特币大跌的 2 个原因
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # C++之functional库用法整理
  • # 飞书APP集成平台-数字化落地
  • # 数论-逆元
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (笔试题)分解质因式
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)ssm码农论坛 毕业设计 231126
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .FileZilla的使用和主动模式被动模式介绍
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道