在django中使用原生sql語句

2022-06-22 07:03:08 字數 1821 閱讀 2099

#

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

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...

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...