在django中如何查看orm轉(zhuǎn)換成的sql語(yǔ)句

問(wèn)題:
django的ORM語(yǔ)句和原生sql語(yǔ)句大相徑庭叔收,在項(xiàng)目開(kāi)發(fā)中如何確保寫(xiě)的ORM語(yǔ)句與自己想要的sql語(yǔ)句師一直的呢???

解決方案:
方案1:
當(dāng)是查詢(xún)語(yǔ)句且查詢(xún)結(jié)果是QuerySet對(duì)象時(shí)纱注,可以使用QuerySet的query屬性查看轉(zhuǎn)化成的sql語(yǔ)句,如下:

newses = NewsModel.objects.select_related('category','author').all()[0:2]
print(newses.query)
print('---'*25)
print(NewsModel.objects.all().query)
print('---'*25)
print(NewsModel.objects.filter(id__gt=2)[3:5].query)

# 打印結(jié)果:
SELECT `news_newsmodel`.`id`, `news_newsmodel`.`title`, `news_newsmodel`.`desc`, `news_newsmodel`.`thumbnail`, `news_newsmodel`.`publish_time`, `news_newsmodel`.`content`, `news_newsmodel`.`category_id`, `news_newsmodel`.`author_id`, `cms_newscategorymodels`.`id`, `cms_newscategorymodels`.`name`, `authPro_user`.`id`, `authPro_user`.`password`, `authPro_user`.`last_login`, `authPro_user`.`is_superuser`, `authPro_user`.`telephone`, `authPro_user`.`username`, `authPro_user`.`email`, `authPro_user`.`is_active`, `authPro_user`.`gender`, `authPro_user`.`date_joined`, `authPro_user`.`is_staff` FROM `news_newsmodel` LEFT OUTER JOIN `cms_newscategorymodels` ON (`news_newsmodel`.`category_id` = `cms_newscategorymodels`.`id`) LEFT OUTER JOIN `authPro_user` ON (`news_newsmodel`.`author_id` = `authPro_user`.`id`) ORDER BY `news_newsmodel`.`publish_time` DESC  LIMIT 2
---------------------------------------------------------------------------
SELECT `news_newsmodel`.`id`, `news_newsmodel`.`title`, `news_newsmodel`.`desc`, `news_newsmodel`.`thumbnail`, `news_newsmodel`.`publish_time`, `news_newsmodel`.`content`, `news_newsmodel`.`category_id`, `news_newsmodel`.`author_id` FROM `news_newsmodel` ORDER BY `news_newsmodel`.`publish_time` DESC
---------------------------------------------------------------------------
SELECT `news_newsmodel`.`id`, `news_newsmodel`.`title`, `news_newsmodel`.`desc`, `news_newsmodel`.`thumbnail`, `news_newsmodel`.`publish_time`, `news_newsmodel`.`content`, `news_newsmodel`.`category_id`, `news_newsmodel`.`author_id` FROM `news_newsmodel` WHERE `news_newsmodel`.`id` > 2 ORDER BY `news_newsmodel`.`publish_time` DESC  LIMIT 2 OFFSET 3

方案2:
直接在項(xiàng)目中使用原生sql語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作胆胰,python借助pymysql模塊操作mysql的簡(jiǎn)單流程如下:

# 導(dǎo)入pymysql模塊
import pymysql

#定義配置信息(字典形式)
db_config = {
  'host' : '127.0.0.1',
  'user' : 'xxx',      #數(shù)據(jù)庫(kù)連接用戶(hù)
  'password' : 'xxx',    #數(shù)據(jù)庫(kù)連接密碼
  'db' : 'tan'      #數(shù)據(jù)庫(kù)名
}


# 建立連接
conn = pymysql.connect(**db_config)
# 建立游標(biāo)
cursor = conn.cursor()

# 執(zhí)行sql語(yǔ)句:  cursor.excute("原生sql語(yǔ)句")  注意:此處的原生sql語(yǔ)句結(jié)尾不用加狞贱;
cursor.excute("select * from students")
#獲取數(shù)據(jù)(列表形式),此處需主動(dòng)獲取數(shù)據(jù)
values = cursor.fetchall()
# 打印數(shù)據(jù)
for value in values:
      print(value)

#提交操作
conn.commit()
#游標(biāo)關(guān)閉
cursor.close()
#連接關(guān)閉
conn.close()

方案3:
django框架采用的ORM模型煮剧,我們可以通過(guò)mysql的日志記錄實(shí)時(shí)查看執(zhí)行的sql語(yǔ)句斥滤,具體步驟如下:

第一步:進(jìn)入mysql将鸵,查看日志開(kāi)啟的狀態(tài)和log文件路徑勉盅;

mysql>  show variables like "%general_log%";
+------------------+-------------------------+
| Variable_name    | Value                   |
+-------------------+------------------------+
| general_log      | OFF                     |
| general_log_file | /var/lib/mysql/VIP.log  |
+------------------+-------------------------+
2 rows in set (0.00 sec)

第二步:如上操作,OFF說(shuō)明沒(méi)有開(kāi)啟日志記錄顶掉,我們可以通過(guò)如下命令設(shè)置日志啟動(dòng)狀態(tài) or 更改日志路徑和日志名草娜;

mysql> set global general_log_file = '/var/lib/mysql/localhost.log';

mysql> set global general_log = 'ON';

mysql>  show variables like "%general_log%";
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | ON                           |
| general_log_file | /var/lib/mysql/localhost.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)

!Q魍病宰闰!注意:
日志開(kāi)啟后,所有執(zhí)行的sql都會(huì)被記錄下來(lái)簿透,但是如果重啟mysql就會(huì)停止記錄移袍,即general_log的值變回OFF!

/****** 更改general_log='ON'后若重啟mysql服務(wù)  *****/

# 重啟mysql服務(wù)
service mysql restart

# 進(jìn)入mysql再次查看日志狀態(tài)老充,general_log再次變?yōu)镺FF
mysql>  show variables like "%general_log%";
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| general_log      | OFF                    |
| general_log_file | /var/lib/mysql/VIP.log |
+------------------+------------------------+
2 rows in set (0.00 sec)

拓展:
mysql數(shù)據(jù)庫(kù)支持兩種日志存儲(chǔ)方式:文件(file) and 數(shù)據(jù)表(table)


# 查詢(xún)mysql日志存儲(chǔ)方式
mysql> show variables like "%log_output%";

# 設(shè)置mysql日志存儲(chǔ)方式:文件存儲(chǔ)方式(默認(rèn)方式)
set global log_output = "FILE";

# 設(shè)置mysql日志存儲(chǔ)方式:數(shù)據(jù)表存儲(chǔ)方式
set global log_output = "TABLE";

# 設(shè)置mysql日志存儲(chǔ)方式:文件和數(shù)據(jù)表同時(shí)存儲(chǔ)日志
set global log_output = "TABLE,FILE";

以上方法也只是讓你看思路的一種 具體的還是要自己做一些優(yōu)化葡盗,反正這個(gè)是在百度上看到的 感覺(jué)比較好玩 可以看看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啡浊,隨后出現(xiàn)的幾起案子觅够,更是在濱河造成了極大的恐慌,老刑警劉巖巷嚣,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喘先,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡廷粒,警方通過(guò)查閱死者的電腦和手機(jī)窘拯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)红且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涤姊,你說(shuō)我怎么就攤上這事直焙。” “怎么了砂轻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奔誓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我搔涝,道長(zhǎng)厨喂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任庄呈,我火速辦了婚禮蜕煌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诬留。我一直安慰自己斜纪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布文兑。 她就那樣靜靜地躺著盒刚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绿贞。 梳的紋絲不亂的頭發(fā)上因块,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音籍铁,去河邊找鬼涡上。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拒名,可吹牛的內(nèi)容都是我干的吩愧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼增显,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雁佳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起甸怕,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甘穿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后梢杭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體温兼,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年武契,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了募判。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荡含。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖届垫,靈堂內(nèi)的尸體忽然破棺而出释液,到底是詐尸還是另有隱情,我是刑警寧澤装处,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布误债,位于F島的核電站,受9級(jí)特大地震影響妄迁,放射性物質(zhì)發(fā)生泄漏寝蹈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一登淘、第九天 我趴在偏房一處隱蔽的房頂上張望箫老。 院中可真熱鬧,春花似錦黔州、人聲如沸耍鬓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牲蜀。三九已至,卻和暖如春合冀,著一層夾襖步出監(jiān)牢的瞬間各薇,已是汗流浹背项贺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工君躺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人开缎。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓棕叫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親奕删。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俺泣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)題: 1.django的ORM語(yǔ)句和原生sql語(yǔ)句大相徑庭,在項(xiàng)目開(kāi)發(fā)中如何確保寫(xiě)的ORM語(yǔ)句與自己想要的sql...
    handsomePeng閱讀 6,592評(píng)論 0 3
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢(xún)集API 參...
    陽(yáng)光小鎮(zhèn)少爺閱讀 3,823評(píng)論 0 8
  • Django 準(zhǔn)備 “虛擬環(huán)境為什么需要虛擬環(huán)境:到目前位置完残,我們所有的第三方包安裝都是直接通過(guò) pip inst...
    33jubi閱讀 1,326評(píng)論 0 5
  • 今日騎車(chē)17公里到單位伏钠,沖了涼水澡。 在單位吃飯以后要2素1葷谨设,減肥季節(jié)開(kāi)始熟掂。 今日投入15000
    張家老二閱讀 154評(píng)論 0 0
  • 最近總是失眠,那就趁睡不著的時(shí)間來(lái)寫(xiě)點(diǎn)東西吧扎拣。 事情從哪開(kāi)始說(shuō)起呢赴肚,昨天晚上的夢(mèng)吧素跺。 昨天晚上夢(mèng)到爸爸的朋友問(wèn)他說(shuō)...
    Zfan閱讀 137評(píng)論 0 0