<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 模式編輯器 # `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_ddl`和`supports_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` 一個到數據庫的連接對象。`alias`是`connection`的一個實用的屬性,它用于決定要訪問的數據庫的名字。 當你[在多種數據庫之間執行遷移](http://python.usyiyi.cn/django/howto/writing-migrations.html#data-migrations-and-multiple-databases)的時候,這是非常有用的。 > 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[SchemaEditor](https://docs.djangoproject.com/en/1.8/ref/schema-editor/)。 > > 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。 > > [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看