django中使用原生sql語句

2021-10-13 21:22:54 字數 1902 閱讀 3745

# row方法:(摻雜著原生sql和orm來執行的操作)

res = cookbook.objects.raw(

'select id as nid from epos_cookbook where id>%s'

, params=[1

,])print

(res.columns)

# ['nid']

print

(type

(res))#

# 在select裡面查詢到的資料orm裡面的要一一對應

res = cookbook.objects.raw(

"select * from epos_cookbook"

)print

(res)

for i in res:

print

(i.create_date)

print

(i)

res = cookbook.objects.raw(

'select * from epos_cookbook where id>%s'

, params=[1

,])# 後面可以加引數進來

print

(res)

for i in res:

# print(i.create_date)

print

(i)

## select提供簡單資料

person.objects.

all(

).extra(select=

)# 加在select後面

## where提供查詢條件

person.objects.

all(

).extra(where=

["first||last ilike 'jeffrey%'"])

# 加乙個where條件

## table連線其它表

book.objects.

all(

).extra(table=

, where=

['last = author_last'])

# 加from後面

## params添引數

# !! 錯誤的方式 !!

first_name =

'joe'

# 如果first_name中有sql特定字元就會出現漏洞

person.objects.

all(

).extra(where=

["first = '%s'"

% first_name]

)# 正確方式

person.objects.

all(

).extra(where=

["first = '%s'"

], params=

[first_name]

)

from django.db import connection

cursor=connection.cursor(

)# 如果需要配置資料庫

# cursor=connection['default'].cursor()

cursor.execute(

) ret=cursor.fetchall(

)print

(ret)

#((2, '小時光', decimal('10.00'), 2), (3, '未來可期', decimal('33.00'), 1), (4, '打破思維裡的牆', decimal('11.00'), 2), (5, '時光不散', decimal('11.00'), 3))

注意:如果在sql語句中有用到除法(%),需要使用%%來轉義,因為在str中%多用於格式化輸出。

Django中使用原生Sql

在django中使用原生sql主要有以下幾種方式 一 extra 結果集修改器,一種提供額外查詢引數的機制 二 raw 執行原始sql並返回模型例項 三 直接執行自定義sql 這種方式完全不依賴model,前兩種還是要依賴於model 例項 使用extra 1 book.objects.filter...

Django中使用原生SQL

使用extra 結果集修改器,一種提供額外查詢引數的機制 models.book.objects.filter publisher name 人民出版社 extra where price 50 models.book.objects.filter publisher name 人民出版社 pric...

在Django中使用原生sql

raw row方法 摻雜著原生sql和orm來執行的操作 res cookbook.objects.raw select id as nid from epos cookbook where id s params 1,print res.columns nid print type res 在se...