【问题标题】:How convert 'tuple' object to str如何将“元组”对象转换为 str
【发布时间】:2015-10-31 09:18:40
【问题描述】:

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

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

但这显示了这个错误:Can't convert 'tuple' object to str implicitly

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

【问题讨论】:

  • ("AND t1.nome LIKE %s", ['%'+pista+'%']) 正在创建一个元组
  • 好的,感谢您的评论。我是 Python/Django 的初学者,这是我第一次使用元组。

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


【解决方案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

附:您可能有理由使用原始 sql 而不是 ORM,但我建议您先用尽您可以使用 ORM 而不是原始 sql 的方式。不过,这取决于你。

【讨论】:

  • 感谢杰拉德,我正在使用这些表格,因为我有其他系统。你解决了我的问题,但我已经对你的代码进行了一些编辑。
【解决方案2】:

你可以试试这个:

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

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

【讨论】:

  • 好的,很抱歉我的问题的命名,我是 Django 和后端系统的初学者,我不知道大多数概念。
猜你喜欢
  • 2023-03-18
  • 2013-04-08
  • 2013-01-14
  • 2022-06-22
  • 2021-12-05
  • 2015-11-14
  • 2022-07-06
  • 2019-11-01
  • 2015-11-07
相关资源
最近更新 更多