0

「Q()」を使用した非常に長いクエリがありSqlite3、非常にうまく機能しますが、postgresqlたとえばmysql、postgresql:invalid input syntax for integer: "(" および mySQL: で奇妙なエラーが発生します。Truncated incorrect DOUBLE value: '('

そのクエリをmysqlで実行するにはどうすればよいですか? 私の間違いはどこですか?

そのクエリは次のとおりです。

    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()
4

2 に答える 2

1

モデルを投稿していませんauthorが、整数フィールド、または外部キーのようです。その場合、なぜstr値のタプルを使用しているのですか?おそらく、作成者がそれらの値の1つであるかどうかを確認する必要があります。strしたがって、呼び出しを削除するだけです。

sqliteで機能するように見える理由は、sqliteがフィールドタイプを無視するためです。文字列と整数は同じように扱われます。他のDBMSはより厳密です。

于 2009-12-12T10:47:14.650 に答える
1

クエリを見て明らかなことは何もありません。Sqlite3 と MySql の生のクエリを比較すると便利です。このリンクは、SQL クエリのデバッグをオンにする方法を示しています。

于 2009-12-11T23:06:23.383 に答える