如何将'tuple'对象转换为str

时间:2015-08-07 20:21:05

标签: python sql django python-3.x django-views

我正在尝试在我的应用中创建搜索字段。首先,我想加载所有结果,但如果用户请求搜索,只显示您的答案。

def get_queryset(self):
    pista = self.request.GET.get('pesquisar_por')

    sql = (
    "SELECT t1.codigo, t1.nome, t1.quantidade, t1.preco_venda, t2.nome as nome_grupo "+
    "FROM produto t1 "+
    "LEFT JOIN grupo t2 on (t1.grupo = t2.codigo) "+
    "WHERE t1.status= 'A' ")
    if pista is not None:
        sql = sql + ("AND t1.nome LIKE %s", ['%'+pista+'%'])
    sql = sql + "ORDER BY t1.nome LIMIT 300"
    produtos = Produto.objects.using('horus').raw(sql)
    return produtos

但是这显示了这个错误:无法将'tuple'对象隐式转换为str

错误在这一行:sql = sql +(“AND t1.nome LIKE%s”,['%'+ pista +'%'])

2 个答案:

答案 0 :(得分:1)

我相信你的sql连接和执行应该是这样的:

sql = sql + "AND t1.nome LIKE %%s%"

然后在.raw()方法中传递参数,如:

produtos = Produto.objects.using('horus').raw(sql, [pista])

我不记得你是否需要使用%而不是%%%s%% 逃避 %%s%,但你绝对应该使用方法签名而不是自己连接事物以避免SQL注入攻击。

选中此项作为参考:https://docs.djangoproject.com/en/1.8/topics/db/sql/#passing-parameters-into-raw

P.S。您可能有理由使用原始sql而不是ORM,但我建议首先用尽可能使用ORM而不是原始sql的方法。不过,这取决于你。

答案 1 :(得分:0)

你可以试试这个:

if pista is not None:
    sql = sql + "AND t1.nome LIKE %{pista}%".format(pista=pista)

这个不会在str 中转换元组,但可以提供帮助。