当前位置: 首页 > 网络应用技术

如何同步Django冗余字段(2023年的最新共享)

时间:2023-03-07 11:17:35 网络应用技术

  简介:今天,首席CTO Note将与您分享如何同步Django冗余字段。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  您的意思是修改了字段。如何同步到数据库端?

  django1.7之前无法实现。Django1.7提供迁移支持表结构同步。

  更新Django的Manytomany字段:

  1.创建新的时:

  post.objects.create(title = title,content = content,pub_date = pub_date,rution =作者)

  p1.label.add(p)

  标签是Manytomany领域。

  2.更新时:

  post.objects.filter(id = num).save(title = title,content = content,pub_date = pub_date,rution = rution)

  3.如果此时更新滥用,则将成为批处理更新,并且会发生错误。

  修改设置中的数据库

  数据库= {

  '默认': {

  '引擎':'django.db.backends.mysql',

  “名称”:'书籍',#your数据库名称

  “用户”:“ root”,#your数据库用户名

  '密码':'',#your数据库密码

  '主机':'',#your数据库主机,停留在localhost的简短默认值中

  '端口':'3306',#your数据库端口

  }

  }

  instasted_apps =((

  “书籍”,#您的数据库名称

  治愈

  在MySQL中创建书籍数据库

  检查是否有语法错误

  使用python manage.py sqlall书籍显示mysql语法

  在Python Manage.py同步同步模型中使用数据库

  7

  成功的创造!

  让我们回忆第5章中有关书籍(书)的数据模型:

  1

  来自django.db导入模型

  类出版商(Models.Model):

  name = models.charfield(max_length = 30)

  地址= model.Charfield(max_length = 50)

  city = models.charfield(max_length = 60)

  state_provring = model.charfield(max_length = 30)

  country = models.charfield(max_length = 50)

  网站= models.urlfield()

  def __unicode __(self):

  返回self.name

  班级作者(Models.Model):

  first_name = models.charfield(max_length = 30)

  last_name = models.charfield(max_length = 40)

  电子邮件= models.emailfield()

  def __unicode __(self):

  返回u'%s%s'%(self.first_name,self.last_name)

  课程(Models.Model):

  title = models.charfield(max_length = 100)

  作者= model.manytomanyfield(作者)

  publisher = models.foreignkey(发布者)

  publication_date = model.datefield()

  def __unicode __(self):

  返回self.title

  例如,在第5章的解释中,数据库对象的特定字段的值只需要直接使用属性。例如,要确定具有ID的书的标题,我们要这样做:这样做:

  来自mysite.books.models导入书籍

  b = book.objects.get(id = 50)

  B.神经

  你的django书'

  但是,有一个相关的对象字段,我们没有提及它是外国基金会或Manytomanyfield,它们的影响略有不同。

  访问密钥的价值(外键)

  当您获得外国键字段时,您将获得相关的数据模型对象。例如:

  b = book.objects.get(id = 50)

  B.Publisher

  出版商:Apress Publishing

  b.publisher.website

  你''

  对于``外国人''

  就定义的关系而言,关系的另一端也可以反向追溯,但是由于不对称之间的关系,它略有不同。通过``出版商''的对象,直接

  书籍,使用Publisher.book_set.all(),如下:

  p = publisher.objects.get(name ='apuse Publishing')

  p.book_set.all()

  [巴斯:django书,书:潜入蟒蛇,...]

  实际上,book_set只是一个QuerySet(请参阅第5章的引入),因此它可以实现数据过滤和除法,例如QuerySet,例如:

  1

  p = publisher.objects.get(name ='apuse Publishing')

  p.book_set.filter(name__icontains ='django')

  [书:Django书,书:Pro Django]

  属性名称book_set由小写(例如book)和_set组成。

  访问多对多价值)

  多头键和外部密钥是相同的,但是我们正在处理QuerySet而不是模型实例。例如,如何在此处查看本书的作者:

  b = book.objects.get(id = 50)

  b.authors.all()

  [作者:Adrian Holovaty,作者:Jacob Kaplan-Moss]

  b.authors.filter(first_name ='adrian')

  [作者:Adrian Holovaty]

  b.authors.filter(first_name ='adam')

  []

  也可以是反向查询。要查看作者的所有书籍,请使用funer.book_set,AS:

  a = rution.objects.get(first_name ='admin',last_name ='holovaty'))

  a.book_set.all()

  [书:django书,书:阿德里安的另一本书]

  在这里,就像使用foreferkey字段一样,属性名称book_set是在数据模型(模型)名称之后添加的。

  更改数据库模式(数据库架构)

  3

  当我们在第5章中介绍SynCDB命令时,我们注意到SynCDB创建了数据库中没有的表。它没有同步数据模型的修改,也没有处理数据模型的删除。如果您添加或修改数据模型中的字段或删除数据模型,则需要在数据库中手动修改它。本段将解释特定的:

  在处理模型修改时,重要的是要记住Django数据库层的工作流程。

  如果该模型包含在数据库中尚未建立的字段,则Django将报告错误的信息。当您首次使用DJANGO数据库API请求表时会导致错误(也就是说,它将在运行时造成错误,而不是编译))。

  3

  Django不在乎数据库表中的模型中是否有未定义的列。

  Django不在乎数据库中的模型是否尚未表示形式。

  1

  更改模型的模型体系结构意味着需要按顺序更改Python代码和数据库。

  添加字段

  1

  当您想将字段添加到产品设置表(或模型)时,要使用的技术是使用Django来不关心模型中的列的特征是否不关心。该策略是在该模型中添加字段数据库,然后同步Django模型以包含新字段。

  3

  但是,这里存在鸡蛋和鸡肉的问题。因为您想知道新添加的SQL语句,所以您需要从中使用Django

  查看了manage.py sqlass命令,这需要模型中存在该字段。(注意:您不必使用与Django相同的SQL语句来创建一个新字段,但这确实是一个好主意,这可以使所有内容保持同步。)

  3

  解决此鸡肉蛋的问题的解决方案是在开发人员环境中而不是发布环境中实现这一变化。(您正在使用测试/开发环境,对吗?)以下是特定的实现步骤。

  首先,输入开发环境(即在发行环境中):

  将字段添加到您的模型中。

  运行manage.py sqlall [yourawp]测试新的创建表语句。请注意新字段的定义。

  打开数据库交互式命令接口(例如,PSQL或MySQL,或者您可以使用

  manage.py dbshell)。执行Alter表语句以添加新列。

  使用python的manage.py shell导入模型并选择表单(例如,例如,

  mymodel.objects.all()[:5])验证是否正确添加了新字段。如果一切顺利,所有句子都不会报告错误。

  3

  然后在您的产品服务器上实现这些步骤。

  启动数据库的交互式接口。

  5

  在开发环境的第三步中执行ALTE表语句。

  将新字段添加到模型中。如果您使用控制工具的特定版本,并且在第一步中,您在开发环境中进行了修改。现在,您可以在生产环境中更新代码(例如,如果使用颠覆,请执行SVN执行SVNUPDATE。

  重新启动Web服务器,以便修改生效。

  让我们练习,例如在第5章中将num_pages字段添加到书籍模型中。首先,我们将在开发环境中将模型更改为以下形式:

  课程(Models.Model):

  title = models.charfield(max_length = 100)

  作者= model.manytomanyfield(作者)

  publisher = models.foreignkey(发布者)

  publication_date = model.datefield()

  ?

  def __unicode __(self):

  返回self.title

  克莱里(Clery)是基于Python开发的简单,灵活和可靠的分布式任务队列框架。它支持使用任务队列在分布式计算机/流程/线程上执行任务计划。典型的生产者消费者模型主要由三个部分组成:

  例如,系统在系统前批量介绍历史数据,发送文本消息,发送电子邮件和其他时间 - 耗费的任务

  1.安装兔子。在这里,我们将RabbitMQ作为经纪人。安装完成后

  Ubuntu Linux安装

  CentOS Linux安装

  Apple Mac安装需要配置

  配置环境变量(Apple用户)

  启动RabbitMQ服务器

  2.安装克莱里

  3.芹菜在Django项目中使用,Django项目目录结构(简化)如下

  4.创建OA/CLERY.PY主文件

  5.在OA/__ init__.py文件中添加以下内容,以确保Django启动时可以加载此应用程序

  6.每个应用程序都会创建一个任务。Py文件,此处使用/tasks.py。

  7. Views.py引用以使用此任务异步处理

  8.启动克莱里

  9.这样,在调用帖子方法时,可以异步地处理内部的添加

  定时任务的使用方案非常普遍。例如,我需要定期向老板发送报告?

  1. oa/clery.py文件添加以下配置以支持计时任务crontab

  3.首发克莱里·比特(Start Clery Beat),芹菜已经开始了一个节拍过程,该过程一直在不断判断是否有执行的任务

  结论:以上是首席CTO注释为每个人编制的Django冗余场的所有内容。感谢您阅读本网站的内容。我希望这对您有帮助。不要忘记在此网站上找到它。