根據Django Model動態生成sql的方法

2021-07-02 07:54:02 字數 1581 閱讀 1536

**:

當定義好django model後,一般可以在初始化呼叫syncdb方法來自動在資料庫裡面生成相應的表。

那麼如果想在後續階段想根據根據django model動態生成資料表,該怎麼辦呢?

要生成資料庫表,就得先根據model的定義先生成sql語句,然後在資料庫裡面執行。

並且由於要支援不同的資料庫,所生成的sql語句可能還有差別,如果自己去讀model來生成sql語句無疑笨辦法。

好在django提供了sql,sql_all命令來列印model的 sql語句,因此通過對分析原始碼,找到了辦法:

比如model定義如下:

class testmodel(models.model):

name=models.charfield(max_length=64,blank=true)

>>> from django.core.management.color import no_style   

#style是用來輸出語句時著色的,沒什麼用

>>> from django.db import connection

>>> from django.db.backends import creation

#這裡面有個類basedatabasecreation,就是用來生成sql語句的。

>>> t=testmodel()

>>> c=creation.basedatabasecreation(connection)

>>>c.sql_create_model(t,no_style())[0]

['create table "abc" (\n    "id" integer not null primary key,\n    "theme" varchar(64) not null\n)\n;']

這樣就可以取得這個模型的sql定義語句了,並且針對不同的資料庫處理django已經幫我們做好了。

有了sql定義語句,我們就可以呼叫直接生成表了。

#coding:utf8

from django.core.management.base import basecommand

class command(basecommand):

def handle(self, *args, **options):

from django.core.management.color import no_style

#style是用來輸出語句時著色的,沒什麼用

from django.db import connection

from django.db.backends import creation

#這裡面有個類basedatabasecreation,就是用來生成sql語句的。

c = creation.basedatabasecreation(connection)

for model in [province, city, area]:

t = model()

print c.sql_create_model(t,no_style())[0][0]

根據Django Model動態生成資料表的方法

當定義好django model後,一般可以在初始化呼叫syncdb方法來自動在資料庫裡面生成相應的表。那麼如果想在後續階段想根據根據django model動態生成資料表,該怎麼辦呢?要生成資料庫表,就得先根據model的定義先生成sql語句,然後在資料庫裡面執行。並且由於要支援不同的資料庫,所生...

Easyui Datagrid 根據字段動態合併行

效果 使用方法 mergecellsbyfield table shoukuan fcontractno,fbizdate,ftotalamountnotax,ftotalamount,fpersonname,fgroupname 0,1,2,3,4,5 easyui datagrid根據字段動態合...

Django model欄位型別清單

django 通過 models 實現資料庫的建立 修改 刪除等操作,本文為模型中一般常用的型別的清單,便於查詢和使用 charfield.max length 字元的最大長度,django會根據這個引數在資料庫層和校驗層限制該字段所允許的最大字元數。auto now 當物件被儲存時,自動將該字段的...