在Django中使用原生sql

2021-10-12 13:49:48 字數 1589 閱讀 6366

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)) # # 在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)

extra

## select提供簡單資料

person.objects.all().extra(select=) # 加在select後面

## where提供查詢條件

person.objects.all().extra(where=["first||last ilike 'jeffrey%'"]) # 加乙個where條件

## table連線其它表

## 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])

connection(類似pymysql)

from django.db import connection

cursor=connection.cursor()

# 如果需要配置資料庫

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

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語句

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

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