django使用raw 執行sql語句多表查詢

2021-10-09 17:15:40 字數 2948 閱讀 2880

python3.7

django2.2.16

mysql5.7

資料庫表:product(產品表) model_replace(產品型號替換表),兩個表並沒有外來鍵關聯關係,只是通過乙個product_unique_sign去關聯

product

product_id

product_name

product_model

product_unique_sign

1產品1

model01

1001

2產品2

model02

1002

3產品3

model03

1003

model_replace

model_id

product_model

product_model_replace

product_unique_sign

1model02

model01

1002

2model02

model03

1002

def

search

(request)

: params =

""# 根據自己的業務邏輯可以在params新增where的查詢條件,拼接到sql_str字串中

# 如果是字串型別的引數,記得在{}的兩側加上單引號,否則會報錯。

# 因為生成的sql語句 會是 and p.product_model = model02 。這種sql語句肯定是錯誤的。

param_model =

"model02"

params +=

" and p.product_model = '{}' "

.format

(param_model)

sql_str =

"select p.product_id as product_id, p.product_name as product_name,p.product_model as product_model,p.product_unique_sign as product_unique_sign,m.product_model_replace as product_model_replace from product as p left join model_replace on p.product_unique_sign = m.product_unique_sign where 1=1 {}"

.format

(params)

models2 = product.objects.raw(str_sql)

data2 =

if models2 and

len(models2)

>0:

for temp in models2:

)# *****最終獲得data2是乙個字典的集合

print

("data2={}"

.format

(data2)

)# 分頁後的每頁總資料

data_page = paginator(data2, row_count)

# 總頁數

page_total = data_page.num_pages

# 獲取當前頁面的資料列表

data = data_page.page(page_current)

.object_list

# 總共多少條資料

row_num = data_page.count

dict_data =

dict_data = json.dumps(dict_data)

# print(dict_data)

# 返回前台資料

return httpresponse(dict_data)

# 對應sqla_str中的查詢條件的字段

defchange_obj_to_dict

(temp)

:dict

=dict

["product_id"

]= temp.product_id

dict

["product_name"

]= temp.product_name

dict

["product_model"

]= temp.product_model

dict

["product_unique_sign"

]= temp.product_unique_sign

# 雖然產品表裡沒有替代型號,但是通過sql語句的raw()查詢可以查到結果中是包含非例項物件的字段的

dict

["product_model_replace"

]= temp.product_model_replace

return

dict

當使用like進行模糊查詢時,必須對str_sql字串中的 like 後面的 % 使用 % 進行轉義。

示例如下:

# mysql

select * from product where product_name like '%產品01%'

# python 寫法

product_name =

"產品01"

param_sql =

" and product_name like '%%{}%%' "

.format

(product_name)

str_sql =

''' select * from product where 1=1 '''

.format

(param_sql)

Oracle使用審計監控使用者執行過的SQL語句

1.使用管理員使用者sys,建立儲存過程 create or replace procedure audituser audituser in varchar2,oper in int is policyname varchar2 2000 policynum varchar2 20 cursor ...

Oracle使用審計監控使用者執行過的SQL語句

監控使用者執行過的sql語句,經常會使用查詢v sql等檢視,但這樣查不出來多次執行相同的sql語句,使用審計可以解決這個問題,這裡採用精細審計某個使用者的所有表。用sys使用者登記 建立下面的的過程 create or replace procedure audituser audituser i...

Mysql執行單個sql指令碼 執行多個sql指令碼

1 開啟mysql命令視窗 source test.sqlsource 不帶分號 1 待執行的sql檔案為test1.sql test2.sql test.sql 4.sql等 2 寫乙個總的sql檔案例如 all.sql檔案 source test1.sql source test2.sql so...