2017-02-16 54 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值(可能是垃圾)。

尝试直接在数据库上运行相同的查询,它可能会有相同的结果。