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