Django: Query funciona bem com o SQLITE3, não com outros sistemas de gerenciamento de banco de dados

StackOverflow https://stackoverflow.com/questions/1891408

Pergunta

Eu tenho uma consulta bastante longa com 'q ()', com Sqlite3 funciona muito bem, mas com postgresql ou mysql Eu tenho um erro estranho, por exemplo, para o PostgreSQL: invalid input syntax for integer: "(" E para MySQL: Truncated incorrect DOUBLE value: '('

Como eu poderia executar essa consulta com o MySQL? Onde está meu erro?

Aqui está essa consulta:

    watchersTuple = self.getWatchers()
    tagsTuple = self.getTags()
    blockedUserTuple = self.getBlockedUser()
    blockedTagTuple = self.getBlockedTag()

    statuses = Status.objects.filter( (Q(author__in = str(watchersTuple)) | Q(tags__in = str(tagsTuple)) | Q(author = self) | Q(recipient = self)) & ~Q(author__in = str(blockedUserTuple)) & ~Q(tags__in = str(blockedTagTuple)) ).distinct()
Foi útil?

Solução

Você não postou seus modelos, mas parece author é um campo inteiro, ou talvez uma chave estrangeira. Nesse caso, por que você está usando str na tupla dos valores? Você presumivelmente deseja verificar se o autor é um desses valores. Então, basta remover o str ligar.

A razão pela qual parece funcionar no sqlite é que o sqlite ignora tipos de campo - strings e números inteiros são tratados da mesma forma. Outros DBMSs são mais rigorosos.

Outras dicas

Não há nada óbvio olhando para a consulta. Seria útil comparar as consultas brutas para o SQLITE3 e MYSQL. este link Mostra como ativar a depuração da consulta SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top