2017-02-16 55 views
0

當我在Django的原始查詢中使用MySql函數AES_DECRYPT()時,此函數不起作用。我的代碼是這樣的:Mysql AES_DECRYPT()函數在Django原始查詢中不起作用

sql = "select AES_DECRYPT(myfield, mykey) as ssn from mytable " 
people_list = Peopletable.objects.raw(sql) 
for p in people_list: 
    print p.ssn 

它打印出無,這意味着AES_DECRYPT()不起作用。但是,如果我在Python端運行查詢,那麼我得到我需要的。我嘗試了其他的mysql函數,如SUBSTR(),並且它們完美地工作。似乎只有這個AES_DECRYPT()在Django中不起作用。誰能幫忙?非常感謝!

+0

我不是Django prog,但'Peopletable.objects.raw(sql)'實際執行查詢嗎? – RiggsFolly

+0

是的,它的確如此。我可以獲得除AES_DECRYPT()函數之外的所有其他字段的值。 – Hannah

+0

您是否使用MYSQL AES_ENCRYPT加密該列? – RiggsFolly

回答

0

它實際上並不意味着它不起作用,只是AES_DECRYPT(myfield,mykey)的結果是None(null)。

如果AES_DECRYPT()檢測到無效數據或不正確的填充,則返回NULL。但是,如果輸入數據或密鑰無效,AES_DECRYPT()可能會返回一個非NULL值(可能是垃圾)。

嘗試直接在數據庫上運行相同的查詢,它可能會有相同的結果。