當前位置:首頁 » 編程語言 » django自定義sql查詢
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

django自定義sql查詢

發布時間: 2022-09-26 00:37:57

『壹』 怎麼在django裡面執行sql語句

首先導入: from django.db import connection 然後創建一個cursor,然後就執行吧。 cursor = connection.cursor() cursor.execute("select * from table") 執行完別忘了關閉連接。 cursor.close() 我也是Django初學者

『貳』 Django 中使用model 怎麼查詢不等於某個值的情況

Model是django項目的基礎, 如果一開始沒有好好設計好, 那麼在接下來的開發過程中就會遇到更多的問題. 然而, 大多數的開發人員都容易在缺少思考 的情況下隨意的增加或修改model. 這樣做的後果就是, 在接下來的開發過程中, 我們不得不做出更多努力來修正這些錯誤.
因此, 在修改model時, 一定盡可能的經過充分的考慮再行動! 以下列出的是我們經常用到的一些工具和技巧:
South, 用於數據遷移, 我們會在每個django項目中都用到. 但到django 1.7時, 將會有django.db.migrations代替.
django-model-utils, 用於處理常見的模式, 例如TimeStampedModel.
django-extensions, 主要用到shell_plus命令, 該命令會在shell中自動載入所有的app的model
1. 基本原則
第一, 將model分布於不同的app中. 如果你的django項目中, 有一個app擁有超過20個model, 那麼, 你就應當考慮分拆該app了. 我們推薦每個app擁 有不超過5個model.
第二, 盡量使用ORM. 我們需要的大多數資料庫索引都能通過Object-Relational-Model實現, 且ORM帶給我們許多快捷方式, 例如生成SQL語句, 讀取/更新資料庫時的安全驗證. 因此, 如果能使用簡單的ORM語句完成的, 應當盡量使用ORM. 只有當純SQL語句極大地簡化了ORM語句時, 才使用純SQL語句. 並且, 在寫純SQL語句是, 應當優先考慮使用raw(), 再是extra().
第三, 必要時添加index. 添加db_index=True到model中非常簡單, 但難的是理解何時應該添加. 在建立model時, 我們事先不會添加index, 只有當 以下情況時, 才會考慮添加index:
在所有的資料庫查詢中使用率在10%-25%時
或當有真實的數據, 或能正確估計出使用index後的效果確實滿意時
第四, 注意model的繼承. model的繼承在django中需要十分小心, django提供了三種繼承方式, 1.abstract base class繼承(不要和Pyhton標准庫的abc模塊 搞混), 2.多表(multi-table)繼承, 3.proxy model繼承. 下表羅列了這三種繼承的優劣:

django的創造者和其他許多開發人員都認為, 多表繼承的方法不是一個良好的方法. 因此我們強烈建議大家不要使用該方法. 下面列舉了一些常見的如何 選擇model繼承的情形:
如果只有少數model擁有重復的field時, 大可不必使用model繼承, 只需要在每個model中添加這些相同的field即可.
如果有足夠的model擁有重復的field時, 大多是情況下, 可以使用abstract base class繼承, 將相同的field提取到abstract base class 中.
Proxy model繼承很少被用到, 和其他兩種繼承也有著許多不一樣之處.
請不要使用多表(multi-table)繼承, 因為它既消耗資源又復雜, 如果可以, 盡量使用OneToOneFields和ForeignKeys代替.
django項目中, 創建時間和修改時間這兩個field是最用到的, 下面給出一個abstract base class繼承的例子:

2. Django Model的設計
如何設計出好的django model可能是最難也是最復雜的一個話題了, 在此, 我們看看一些基本的技巧吧:
a. 規范化
我們首先建議了解資料庫規范化(database normalization). 如果你還不清楚這是什麼, 那麼, 我們強烈建議你先閱讀一下相關的書籍, 或搜索"關系 型資料庫設計"或"資料庫規范化". 在創建django model之前, 應當首先保證設計的資料庫是規范化的.
b. cache
正確的使用cache能幫助我們提高資料庫的性能. 詳細的信息, 我們會在今後的文章中作進一步介紹.
c. 何時使用null和blank
當定義model field時, 我們可以設置null=True和blank=True (默認都是False), 知道何時設置null和blank對於開發人員也是十分重要的, 在下 面的表格中, 我們一一列舉了如何使用這兩個選項:

d. 什麼時候使用BinaryField
在django 1.6中, 新增了BinaryField, 用於儲存二進制數據(binary data或 bytes). 對於BinaryField, 我們無法使用ORM的filters, excludes或其他SQL操作. 但在少數情況下, 我們會用到BinaryField, 例如MessagePack格式的內容, 感測器接受的原始數據和壓縮數據等. 但需要注意 的是, Binary Data一般都十分龐大, 因此可能會拖慢資料庫的速度. 如果發生這一現象, 我們可以將binary data儲存在文件中, 然後使用FileField儲 存該文件的路徑信息.
還有, 不要從BinaryField中直接讀取文件並呈獻給用戶. 因為, 1. 從資料庫讀寫總是比從文件系統讀寫慢; 2. 資料庫備份會變得十分龐大, 花費更多 的時間; 3. 獲得文件的過程, 增加了從django到資料庫的這一環節.
3. 不要替換默認的Model Manager
從ORM獲取model, 實際上是通過django中的Model manager完成的, django為每一個model提供了默認的model manager, 我們不建議將其替換掉, 因為:
當使用model繼承時, model會繼承 abstract base class model的model manager, 而不會繼承非abstract base class的manager.
model的第一個model manager通常作為默認的manager, 當被替換時, 可能會發生不可預測的問題.
4. 資料庫事務 (Transaction)
在django 1.6中, ORM默認會autocommit每一個資料庫查詢, 也就是說, 每次使用m.create()或m.update()時, 在資料庫中馬上就會做出相應的修 改. 這樣做的好處就是簡化了初學者對ORM的理解. 但壞處就是, 當一個view中包含兩個資料庫修改, 可能一個成功, 但另一個失敗, 這就可能導致資料庫不 完整, 給我們帶來很大的危險.
解決這一問題的方法就是使用資料庫transaction, 即將一系列資料庫操作包含在一個transaction中, 當其中有一個失敗時, 其他操作也會自動回退. Django 1.6 為我們帶來了一套嶄新的既簡單又強大的transaction機制, 使我們方便的使用資料庫transaction.
a. 將整個http request包裹在transaction中
django給我們提供了一個簡單地方法, 將一個http request中的所有資料庫操作包裹在transaction中:

只需要在資料庫設置中加入'ATOMIC_REQUESTS': True選項, 就能將整個http request包裹在transaction中. 這樣做的好處顯而易見是是安全, 但 壞處則是性能可能會下降, 因此隨著流量的增大, 我們必須採取更針對性的transaction. 其次, 需要注意的是, 回退的只是資料庫的狀態, 而不包括其他費 資料庫項, 例如發送email等. 所以當涉及這些非資料庫項時, 我們應當使用transaction.con_atomic_request()修飾(decorate)這些view:

b. 更明確地transaction控制
更明確地transaction控制意味著提高真題web app的性能, 但也意味著更多的開發時間. 大多數網站下, 由於有限的流量, 使用ATOMIC_REQUESTS已 經足夠. 在使用手動transaction控制時, 應當注意:
不做數據修改的操作, 應當排除在transaction之外
做數據修改的操作, 則應在transaction內
特殊情況下, 可以違反以上兩條
需要注意的是, 當view返回的是django.http.StreamingHttpResponse時, 應當設置ATOMIC_REQUESTS為false, 或使用 transaction.non_atomic_requests將該view修飾. 因為對於view本身, 是可以使用transaction的, 但對於之後生成的response stream觸發的額 外SQL查詢, 會自動變為django默認的autocommit模式.

『叄』 如何查看在Django模型創建的SQL語句

Django提供了sql,sql_all命令來生成MODEL的SQL語句,當定義好Django Model後,可以在初始化調用Syncdb方法來自動在資料庫裡面生成相應的表。
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;']

『肆』 django 如何執行sql語句,例如select * from temp t where t.a like '%ni%'

首先導入:
from django.db import connection

然後創建一個cursor,然後就執行吧。
cursor = connection.cursor()
cursor.execute("select * from table")

執行完別忘了關閉連接。
cursor.close()

my friend do you know?

『伍』 sql怎麼使用自定義函數來查詢

用游標: declare @變數1 varchar(50),@變數2 varchar(50) -----創建游標 declare mycurs cursor for select 欄位A,欄位B from table1 open mycurs-----打開游標 fetch next from mycurs into @變數1,變數2 while @@fetch_Status=0--循環游標 begin ---循環處理 fetch next from mycurs into @變數1,變數2 end close mycurs Deallocate mycurs 我說的可能不好,你自己去可以看看游標的相關資料。

『陸』 django如何跨表查詢

1、 表的名稱myapp_modelName,是根據 模型中的元數據自動生成的,也可以覆寫為別的名稱
2、id 欄位是自動添加的
3、對於外鍵欄位,Django 會在欄位名上添加"_id" 來創建資料庫中的列名
4、這個例子中的CREATE TABLE SQL 語句使用PostgreSQL 語法格式,要注意的是Django 會根據settings 中指定的資料庫類型來使用相應的SQL 語句。
5、定義好模型之後,你需要告訴Django _使用_這些模型。你要做的就是修改配置文件中的INSTALL_APPSZ中設置,在其中添加models.py所在應用的名稱。
6、外鍵欄位 ForeignKey 有一個 null=True 的設置(它允許外鍵接受空值 NULL),你可以賦給它空值 None 。

『柒』 怎麼在django裡面執行sql語句

首先導入: from django.db import connection 然後創建一個cursor,然後就執行吧。 cursor = connection.cursor() cursor.execute("select * from table") 執行完別忘了關閉連接。 cursor.close() 我也是Django初學者

『捌』 如何查看django執行的sql語句及消耗時間

在查詢分析器中,選中 包含客戶端統計信息 ,執行結果就會多一個選項卡。 如果是在應用程序中,在執行語句的前後各加一個時間,兩個時間對比就行了。 也可以在跟蹤里,查看語句的執行時間。

『玖』 如何在Django中直接使用sql語句

執行SQL語句要看你使用什麼樣的資料庫,一般來說資料庫有兩種介面,一種是命令行介面,一種是GUI界面的程序管理介面,比如 mysql,你可以在命令行執行mysql來進行執行,也可以使用phpmyadmin、navcat之類的第三方的GUI管理工具來執行。

『拾』 django sqlite可以用sql語句操作嗎

sqlite3 使用
1、import sqlite3 確認系統中是否安裝
2、進入當前項目目錄,cmd後運行python,進入命令行模式
3、import sqlite3,
sqlite3.connect('{path\name.db}') #大括弧內表示自定義,真實情況沒有大括弧
4、修改settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': {path\name.db}',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
5、進入資料庫文件界面,運行python manage.py shell
from django.db import connection
cur = connection.cursor()
如果沒報錯,則表示配置成功
6、修改models.py文件,配置自己的表
例如:
from django.db import models
from django.contrib import admin

# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField()
class Meta:
ordering = ['-timestamp']
7、創建資料庫內容
python manage.py syncdb
根據提示輸入,表示連接成功
註:以上只表示對資料庫的創建,連接和使用,不包含其它內容。