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

模式编辑器

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。

展开阅读全文

150讲轻松搞定Python网络爬虫

05-16
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。   从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

实用主义学Python(小白也容易上手的Python实用案例)

12-24
原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会  【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例
©️2020 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值