wiki:DjangoSQLiteErrorBindingParameter

Djangoが「Error Binding Parameter 0」とか怒る

くだらないミスなのに、一度ならずも二度も同じエラーにハマったのでメモ。

現象

InterfaceError: Error binding parameter 0 - probably unsupported type.

Djangoがこういうエラーを出すことがあって、意味がわからない。

意味

  • そもそもこれはDjangoのエラーではなく、PySQLiteのエラーメッセージ。
  • SQLiteに与えたクエリ文字列に、パラメータの位置を示す「?」が含まれていて、かつ、
  • 与えられたパラメータが文字列とか数値など適切な型ではない、という意味。

Django的に

Django的には、たとえば、

User.objects.filter(username=user)

などとした時、本当は「user」に文字列を渡さなきゃいけないのに変な物(たとえば自前のオブジェクト)を渡すと、上記のエラーが出ます。

自分の場合

いろいろと訳がありまして。 「TEMPLATE_CONTEXT_PROCESSORS」に、ユーザ認証済みでなければ使えない関数を入れてました。 Djangoの認証ページでは!RequestContextが使われるため、こんなハメになりました。

(2008/3/25 - sgk)