Hello all:
Consider table:
CREATE TABLE PRICE_SOURCES (
ID decimal(22) PRIMARY KEY NOT NULL,
DESCRIPTION char(100) NOT NULL
)
and this screen dump from ipython session:
In [28]: import cx_Oracle
In [29]: from sqlalchemy.ext.sqlsoup import SqlSoup
In [30]: con = cx_Oracle.connect('myuser/myp...@mydb')
In [31]: cursor = con.cursor()
In [32]: cursor.execute("select * from price_sources where description
= 'EJV'").fetchall()
Out[32]:
[(149,
'EJV
')]
Note that the result has padding in the column "description" as it is
of type CHAR(100), with is fixed length.
Now, let's do the same in SqlAlchemy.
In [33]: soup = SqlSoup('oracle://myuser:myp...@mydb')
In [34]: soup.price_sources.filter_by(description='EJV').all()
Out[34]: []
As you can see it returns zero rows. Only after I pad the parameter
for where clause will I get my row back:
In [35]: soup.price_sources.filter_by
(desciption='EJV
').all()
Out[35]: [MappedPrice_sources(pricesource=Decimal
('149'),desciption='EJV
')]
The same behavior happens even if I use ORM and regardless whether the
column metadata is defined with String, OracleString or CHAR.
I can understand the query result being padded as it is consistent
with behavior everywhere but the where clasues must not. It is a big
problem if you try to use session.merge() because you have to pad
contents of object fields otherwise the ORM will insert a duplicate.
Please help. I hope I am doing something wrong or missing something.
Regards,
Victor
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---