开发者社区> apachecn_飞龙> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

django 1.8 官方文档翻译: 2-4-3 模式编辑器

简介: 模式编辑器 class BaseDatabaseSchemaEditor[source] Django的迁移系统分为两个部分;计算和储存应该执行什么操作的逻辑 (django.db.migrations) ,以及用于把“创建模型”或者“删除字段”变成SQL语句的数据库抽象层 – 后者是模式编辑器的功能。
+关注继续查看

模式编辑器

class BaseDatabaseSchemaEditor[source]

Django的迁移系统分为两个部分;计算和储存应该执行什么操作的逻辑 (django.db.migrations) ,以及用于把“创建模型”或者“删除字段”变成SQL语句的数据库抽象层 – 后者是模式编辑器的功能。

你可能并不想像一个普通的开发者使用Django那样,直接和模型编辑器进行交互,但是如果你编写自己的迁移系统,或者有更进一步的需求,这样会比编写SQL语句更方便。

每个Django的数据库后端都提供了它们自己的模式编辑器,并且总是可以通过connection.schema_editor()上下文管理器来访问。

with connection.schema_editor() as schema_editor:
    schema_editor.delete_model(MyModel)

它必须通过上下文管理器来使用,因为这样可以管理一些类似于事务和延迟SQL(比如创建ForeignKey约束)的东西。

它会暴露所有可能的操作作为方法,这些方法应该按照执行修改的顺序调用。可能一些操作或者类型并不可用于所有数据库 – 例如,MyISAM引擎不支持外键约束。

如果你在为Django编写一个三方的数据库后端,你需要提供SchemaEditor实现来使用1.7的迁移功能 – 然而,只要你的数据库在SQL的使用和关系设计上遵循标准,你就应该能够派生Django内建的SchemaEditor之一,然后简单调整一下语法。同时也要注意,有一些新的数据库特性是迁移所需要的:can_rollback_ddlsupports_combined_alters都很重要。

方法

execute

BaseDatabaseSchemaEditor.execute(sql, params=[])[source]

执行传入的 SQL语句,如果提供了参数则会带上它们。这是对普通数据库游标的一个简单封装,如果用户希望的话,它可以从.sql文件中获取SQL。

create_model

BaseDatabaseSchemaEditor.create_model(model)[source]

为提供的模型在数据库中创建新的表,带有所需的任何唯一性约束或者索引。

delete_model

BaseDatabaseSchemaEditor.delete_model(model)[source]

删除数据库中的模型的表,以及它带有的任何唯一性约束或者索引。

alter_unique_together

BaseDatabaseSchemaEditor.alter_unique_together(model, old_unique_together, new_unique_together)[source]

修改模型的unique_together值;这会向模型表中添加或者删除唯一性约束,使它们匹配新的值。

alter_index_together

BaseDatabaseSchemaEditor.alter_index_together(model, old_index_together, new_index_together)[source]

修改模型的 index_together值;这会向模型表中添加或者删除索引,使它们匹配新的值。

alter_db_table

BaseDatabaseSchemaEditor.alter_db_table(model, old_db_table, new_db_table)[source]

重命名模型的表,从old_db_table变成new_db_table

alter_db_tablespace

BaseDatabaseSchemaEditor.alter_db_tablespace(model, old_db_tablespace, new_db_tablespace)[source]

把模型的表从一个表空间移动到另一个中。

add_field

BaseDatabaseSchemaEditor.add_field(model, field)[source]

向模型的表中添加一列(或者有时几列),表示新增的字段。如果该字段带有db_index=True或者 unique=True,同时会添加索引或者唯一性约束。

如果字段为ManyToManyField并且缺少 through值,会创建一个表来表示关系,而不是创建一列。如果提供了through值,就什么也不做。

如果字段为ForeignKey,同时会向列上添加一个外键约束。

remove_field

BaseDatabaseSchemaEditor.remove_field(model, field)[source]

从模型的表中移除代表字段的列,以及列上的任何唯一性约束,外键约束,或者索引。

如果字段是ManyToManyField并且缺少through值,会移除创建用来跟踪关系的表。如果提供了through值,就什么也不做。

alter_field

BaseDatabaseSchemaEditor.alter_field(model, old_field, new_field, strict=False)[source]

这会将模型的字段从旧的字段转换为新的。这包括列名称的修改(db_column属性)、字段类型的修改(如果修改了字段类)、字段NULL状态的修改、添加或者删除字段层面的唯一性约束和索引、修改主键、以及修改ForeignKey约束的目标。

最普遍的一个不能实现的转换,是把ManyToManyField变成一个普通的字段,反之亦然;Django不能在不丢失数据的情况下执行这个转换,所以会拒绝这样做。作为替代,应该单独调用remove_field()add_field()

如果数据库满足supports_combined_alters,Django会尽可能在单次数据库调用中执行所有这些操作。否则对于每个变更,都会执行一个单独的ALTER语句,但是如果不需要做任何改变,则不执行ALTER(就像South经常做的那样)。

属性

除非另有规定,所有属性都应该是只读的。

connection

SchemaEditor.connection

一个到数据库的连接对象。aliasconnection的一个实用的属性,它用于决定要访问的数据库的名字。

当你在多种数据库之间执行迁移的时候,这是非常有用的。

译者:Django 文档协作翻译小组,原文:SchemaEditor

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
django 1.8 官方文档翻译:13-3 日志
日志 日志快速入门 Django 使用Python 内建的logging 模块打印日志。该模块的用法在Python 本身的文档中有详细的讨论。
811 0
django 1.8 官方文档翻译:7-3 Django管理文档生成器
Django管理文档生成器 Django的admindocs应用从模型、视图、模板标签以及模板过滤器中,为任何INSTALLED_APPS中的应用获取文档。
776 0
django 1.8 官方文档翻译: 3-3-4 管理文件
管理文件 这篇文档描述了Django为那些用户上传文件准备的文件访问API。底层的API足够通用,你可以使用为其它目的来使用它们。
820 0
django 1.8 官方文档翻译: 2-2-1 执行查询
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。
744 0
django 1.8 官方文档翻译: 2-1-4 Model 类参考
Model 类参考 这篇文档覆盖Model 类的特性。关于模型的更多信息,参见Model 完全参考指南。 属性 objects Model.objects 每个非抽象的Model 类必须给自己添加一个Manager实例。
741 0
django 1.8 官方文档翻译: 1-3-1 高级教程:如何编写可重用的应用
高级教程:如何编写可重用的应用 本高级教程上接教程 6。我们将把我们的网页投票转换成一个独立的Python包,这样你可以在其它项目中重用或者分享给其它人。
1217 0
django 1.8 官方文档翻译: 3-1-2 编写视图
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html 编写视图 一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。
779 0
django 1.8 官方文档翻译: 3-4-2 内建显示视图
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html 基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式。
643 0
django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html 管理器 class Manager 管理器是一个接口,数据库查询操作通过它提供给django的模型。
545 0
django 1.8 官方文档翻译: 2-5-2 进行原始的sql查询
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html 进行原始的sql查询 在模型查询API不够用的情况下,你可以使用原始的sql语句。
923 0
+关注
apachecn_飞龙
Github:@wizardforcel 简书:@ApacheCN_飞龙 微博:@龙雀 CSDN:@wizardforcel ApacheCN 官网:apachecn.org 机器学习交流群:629470233
719
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载