title: Binding parameters using pyodbc with connection to Firebird
body: <p>I've got an application which uses pyodbc to connect to database. It can by run with different db engines. Now I try to adapt it to Firebird. </p>
  
  <p>For some db engines (tested with sqlite, Sybase) I can use native pyodbc way to handle binding parametres:</p>
  
  <pre><code>cnxn = pyodbc.connect(connect_string, autocommit=True)
  cur = cnxn.cursor()
  cur.execute("insert into files (file_type_id, path, md5) values (?, ?, ?)", file_type_id, path, md5)
  </code></pre>
  
  <p>For Oracle I had to prepare some special SQL to be run:</p>
  
  <pre><code>cnxn = pyodbc.connect(connect_string, autocommit=True)
  cur = cnxn.cursor()
  sql = """DECLARE v_file_type_id INT; v_path varchar2(1024); v_md5 varchar2(32);
           BEGIN
           v_file_type_id := %d;
           v_path := '%s';
           v_md5 := '%s';
           insert into files (file_type_id, path, md5) values (v_file_type_id, v_path, v_md5);
           END;""" % (file_type_id, path, md5)
  cur.execute(sql)
  </code></pre>
  
  <p>First way doesn't work with Firebird. I receive error: <code>pyodbc.IntegrityError: ('23000', '[23000] [ODBC Firebird Driver][Firebird]validation error for column FILE_TYPE_ID, value "*** null ***" (-625) (SQLExecDirectW)')</code>.</p>
  
  <p>I tried to prepare dedicated SQL, just like for Oracle, but I've got some problems with it. </p>
  
  <pre><code>cnxn = pyodbc.connect(connect_string, autocommit=True)
  cur = cnxn.cursor()
  sql = """set term ^ ;
           execute block
           as
           declare v_file_type_id int = %d;
           declare v_path varchar(1024) = '%s';
           declare v_md5 varchar(32) = '%s';
           begin
           insert into files (file_type_id, path, md5) values (:v_file_type_id, :v_path, :v_md5);
           end
           ^
           set term ; ^""" % (file_type_id, path, md5)
  cur.execute(sql)
  </code></pre>
  
  <p>It doesn't work. The rror this time is: <code>pyodbc.Error: ('HY000', '[HY000] [ODBC Firebird Driver][Firebird]Dynamic SQL Error\nSQL error code = -104\nToken unknown - line 1, column 5\nterm (-104) (SQLExecDirectW)')</code>. </p>
  
  <p>I'm looking for any sollution, so I'll be able to run it in any of that 2 ways. Performance aspect is also very important - application isn't run very often, but each time that part of code makes about 50k inserts to <code>files</code> table. </p>