bindparam ignores required=True

Issue #2381 resolved
Mike Bayer repo owner created an issue
from sqlalchemy import *

e = create_engine("sqlite://")

e.execute(
 text("select * from foo where bar=:baz", bindparams=[required=True)](bindparam('baz',)),
)



#!diff
diff -r 8c05a3bf6599f92bbf8d2246123597e8966f3a52 lib/sqlalchemy/sql/compiler.py
--- a/lib/sqlalchemy/sql/compiler.py    Wed Jan 18 12:42:54 2012 -0500
+++ b/lib/sqlalchemy/sql/compiler.py    Sat Jan 21 10:14:19 2012 -0500
@@ -287,7 +287,6 @@

     def construct_params(self, params=None, _group_number=None):
         """return a dictionary of bind parameter keys and values"""
-
         if params:
             pd = {}
             for bindparam, name in self.bind_names.iteritems():
@@ -311,6 +310,17 @@
         else:
             pd = {}
             for bindparam in self.bind_names:
+                if bindparam.required:
+                    if _group_number:
+                        raise exc.InvalidRequestError(
+                                "A value is required for bind parameter %r, "
+                                "in parameter group %d" % 
+                                (bindparam.key, _group_number))
+                    else:
+                        raise exc.InvalidRequestError(
+                                "A value is required for bind parameter %r" 
+                                % bindparam.key)
+
                 pd[self.bind_names[bindparam](self.bind_names[bindparam)] = bindparam.effective_value
             return pd

Comments (2)

  1. Log in to comment