Hi everyone, 

There's IMO unusual behavior in Oracle when using bound parameters on NCHAR 
column. 

from sqlalchemy import create_engine
from sqlalchemy.sql import text


e = create_engine('oracle://chinook:p4ssw0rd@localhost/xe')


result = e.execute(
    text("select * from nchartable where id = '1'"),
).fetchall()


print 'hardcoded:', list(result)


result = e.execute(
    text('select * from nchartable where id = :id'),
    {'id': '1'}
).fetchall()


print 'trimmed:', list(result)




result = e.execute(
    text('select * from nchartable where id = :id'),
    {'id': '1   '}  # padded with spaces
).fetchall()


print 'padded:', list(result)


output
hardcoded: [(u'1   ',)]
trimmed: []
padded: [(u'1   ',)]

When value is hardcoded or bound parameter is padded the statement works as 
expected, but it doesn't when value is trimmed. Although the value in where 
statement is just like in hardcoded case.

As explained on cxOracle mailing list 
https://sourceforge.net/p/cx-oracle/mailman/message/36775002/ it's a 
deliberate decision to bind values str to VARCHAR2 and unicode to 
NVARCHAR2. Unfortunately that doesn't work correctly for filtering on CHAR 
and NCHAR. 

I know it's more cxOracle matter but how do you deal with this in 
SQLAlchemy? Expecially when working with text SQL statement which may be 
complex e.g. use stored procedures. 

Thanks for any clues, 
Michal

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/475bbd60-f3d8-486b-a640-5fd58d679af6%40googlegroups.com.

Reply via email to