thanks for your help. its seems to be working. i will troubleshoot in my development environment.
On Wed, Aug 5, 2015 at 10:37 PM, Mike Bayer <mike...@zzzcomputing.com> wrote: > Attached is a test script illustrating the code you have below along with > a round trip verification using a simple Model class mapped to the table. > Please confirm this script works as expected, as it does here. Assuming > that works, determine what's different about your real-world environment > versus this test case. > > > > > On 8/5/15 11:45 AM, Abhishek Sharma wrote: > > that object already got saved in DB after session.commit(). After that i > am retrieving object which already stored in db. still same issue. > > On Wed, Aug 5, 2015 at 7:41 PM, Mike Bayer <mike...@zzzcomputing.com> > wrote: > >> >> >> On 8/5/15 9:24 AM, Abhishek Sharma wrote: >> >> Hi Team, >> I have created customized data type using TypeDecorator approach. >> >> *from sqlalchemy import TypeDecorator, CLOB* >> >> *class ForceUnicodeClob(TypeDecorator): impl = CLOB* >> >> >> >> * def process_bind_param(self, value, dialect): if >> isinstance(value, str): value = value.decode('utf-8', 'ignore') >> return value* >> >> >> >> * def process_result_value(self, value, dialect): if value >> is not None: value = "PREFIX" + value.decode('utf-8', >> 'ignore') return value* >> >> >> After this in my table definition I declared the type of one of column as >> *ForceUnicodeClob.* >> >> *dlr_dclmr = Table('dlr_dclmr', metadata, Column('dclmr_ds', >> ForceUnicodeClob(), primary_key=False))* >> >> After this I am executing the query on this table with >> session.query(Model) , but when I am accessing result.*dclmr_ds *i am >> not getting response prepended with "PREFIX". >> >> this can happen in the ORM if you retrieve a Model object that is already >> present in the Session, which you created as a pending object: >> >> >> model = Model(dclmr_ds='somestring') >> session.add(model) >> session.flush() >> >> m2 = session.query(Model).filter(...).first() >> >> assert model is m2 >> >> >> that is, you get the same object back. The values of the attributes are >> not updated unless you first expire that object, which normally happens >> when you say session.commit(). >> >> >> >> >> >> >> am i missing some steps? >> >> SQLAlchemy Version: 0.9.9 >> We are using classic mapping for attributes mapping with DB columns. >> >> >> >> >> On Tue, Aug 4, 2015 at 3:49 PM, Mike Bayer < <mike...@zzzcomputing.com> >> mike...@zzzcomputing.com> wrote: >> >>> >>> >>> On 8/4/15 1:41 PM, Abhishek Sharma wrote: >>> >>> is this followings two instructions compulsory while defining new type? >>> m.drop_all(e) >>> m.create_all(e) >>> >>> >>> no that is just part of the demonstration script. >>> >>> >>> >>> this instructions are not feasible , because DB team already defined >>> schema and normal user can not drop and create table. >>> >>> yup, that is a given >>> >>> >>> >>> On Tue, Aug 4, 2015 at 8:59 PM, Mike Bayer < <mike...@zzzcomputing.com> >>> mike...@zzzcomputing.com> wrote: >>> >>>> >>>> >>>> On 8/4/15 7:41 AM, Abhishek Sharma wrote: >>>> >>>> in case lot of overhead will be there so it is better to use that >>>> column label only >>>> >>>> well it doesn't work anyway because data from a CLOB is not in >>>> cx_oracle's world a "String", it's a LOB. The CLOB / NCLOB types for >>>> cx_oracle are organized in their own way where only NCLOB actually has >>>> unicode handling capability, regardless of the coerce_to_unicode or >>>> convert_unicode flags; CLOB does not. So either use NCLOB, or build out >>>> your own convert unicode, here is a demo: >>>> >>>> from sqlalchemy import create_engine, CLOB, Table, MetaData, Column, >>>> select, TypeDecorator >>>> from sqlalchemy.dialects.oracle import NCLOB >>>> >>>> e = create_engine("oracle+cx_oracle://scott:tiger@xe", echo='debug') >>>> >>>> class ForceUnicodeClob(TypeDecorator): >>>> impl = CLOB >>>> def process_result_value(self, value, dialect): >>>> if value is not None: >>>> value = value.decode('utf-8') >>>> return value >>>> >>>> m = MetaData() >>>> t = Table('test', m, Column('data1', NCLOB()), Column('data2', >>>> ForceUnicodeClob())) >>>> >>>> m.drop_all(e) >>>> m.create_all(e) >>>> >>>> e.execute(t.insert(), data1=u'unicode', data2=u'unicode') >>>> >>>> result = e.execute(select([t.c.data1, t.c.data2])) >>>> value1, value2 = result.fetchone() >>>> print repr(value1), repr(value2) >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Tue, Aug 4, 2015 at 6:15 AM, Mike Bayer < <mike...@zzzcomputing.com> >>>> mike...@zzzcomputing.com> wrote: >>>> >>>>> >>>>> >>>>> On 8/4/15 5:47 AM, Abhishek Sharma wrote: >>>>> >>>>> applying convert_unicode to CLOB type does not have any effect. Still >>>>> I am getting str type object from sqlalchemy for CLOB type column >>>>> >>>>> >>>>> have you tried the coerce_to_unicode flag on create_engine() ? >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> On Mon, Aug 3, 2015 at 1:27 PM, Mike Bayer < >>>>> <mike...@zzzcomputing.com>mike...@zzzcomputing.com> wrote: >>>>> >>>>>> >>>>>> >>>>>> On 8/3/15 1:04 PM, Abhishek Sharma wrote: >>>>>> >>>>>> what about CLOB type? Unicode only handles String type. Do i need to >>>>>> use convert_unicode there? >>>>>> >>>>>> >>>>>> if your CLOB expects non-ascii characters then yes. >>>>>> >>>>>> though on Oracle I thought you really need to be using NCLOB for a >>>>>> col that stores unicode. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Aug 3, 2015 at 6:56 PM, Mike Bayer < >>>>>> <mike...@zzzcomputing.com>mike...@zzzcomputing.com> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On 8/1/15 12:12 PM, Abhishek Sharma wrote: >>>>>>> >>>>>>> Thanks for help. But still i have confusion over encoding and >>>>>>> decoding procedure which will take place before retrieving and storing >>>>>>> the >>>>>>> results in DB. >>>>>>> >>>>>>> In case if i am not using convert_unicode option and data type is >>>>>>> String so python process will give str object to sqlalchemy at the time >>>>>>> of >>>>>>> insert record in DB using ORM. So will alchemy store that object in >>>>>>> encoded >>>>>>> form?. So at the time of retrieving ORM will give str object for String >>>>>>> type column to python and python decode that object with default >>>>>>> encoding? >>>>>>> >>>>>>> Can i simply use Unicode Data type for columns where there might be >>>>>>> chance of using non ascii data? >>>>>>> >>>>>>> >>>>>>> if you know that your unicode data is on specific columns then yes, >>>>>>> the Unicode type plugs in an encoder/decoder for those backends that >>>>>>> require it. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Thu, Jul 30, 2015 at 2:55 AM, Mike Bayer < >>>>>>> <mike...@zzzcomputing.com>mike...@zzzcomputing.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 7/29/15 2:23 PM, Abhishek Sharma wrote: >>>>>>>> >>>>>>>> We are using sqlalchemy version 0.7, python 2.7 and oracle Database. >>>>>>>> We have ASCII as default python encoding and DB have ISO-8052 >>>>>>>> encoding. Our DB tables contains some of characters which are out of >>>>>>>> ASCII >>>>>>>> range. So when we are running query on those tables we are getting >>>>>>>> Unicode >>>>>>>> Decode error saying "ASCII" codec can not decode. This error we are >>>>>>>> getting >>>>>>>> without accessing model attributes. >>>>>>>> >>>>>>>> How i can handle these errors without changing python default >>>>>>>> encoding. >>>>>>>> >>>>>>>> >>>>>>>> Oracle's client encoding is controlled by the NLS_LANG environment >>>>>>>> variable. That has to be set correctly first off (see >>>>>>>> <http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html> >>>>>>>> http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html). >>>>>>>> If you have non-ASCII strings encoded in datatypes that are explicitly >>>>>>>> not >>>>>>>> of type NVARCHAR or NCLOB , or you're relying on a lot of raw SQL, and >>>>>>>> you >>>>>>>> are still getting errors, I would set the "coerce_to_unicode=True" >>>>>>>> flag on >>>>>>>> create_engine(), which allows cx_Oracle's unicode facilities to take >>>>>>>> place >>>>>>>> fully for all string data being returned, at the expense of some >>>>>>>> performance. See >>>>>>>> <http://docs.sqlalchemy.org/en/rel_1_0/dialects/oracle.html#unicode> >>>>>>>> http://docs.sqlalchemy.org/en/rel_1_0/dialects/oracle.html#unicode >>>>>>>> for background. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 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> >>>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>>>> sqlalchemy@googlegroups.com. >>>>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>>>> http://groups.google.com/group/sqlalchemy. >>>>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>>>> https://groups.google.com/d/optout. >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to a topic in >>>>>>>> the Google Groups "sqlalchemy" group. >>>>>>>> To unsubscribe from this topic, visit >>>>>>>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>>>>>>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe >>>>>>>> . >>>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>>> <sqlalchemy+unsubscr...@googlegroups.com> >>>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>>>> sqlalchemy@googlegroups.com. >>>>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>>>> http://groups.google.com/group/sqlalchemy. >>>>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>>>> https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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> >>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>>> sqlalchemy@googlegroups.com. >>>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>>> http://groups.google.com/group/sqlalchemy. >>>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>>> https://groups.google.com/d/optout. >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to a topic in >>>>>>> the Google Groups "sqlalchemy" group. >>>>>>> To unsubscribe from this topic, visit >>>>>>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>>>>>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe >>>>>>> . >>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>> <sqlalchemy+unsubscr...@googlegroups.com> >>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>>> sqlalchemy@googlegroups.com. >>>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>>> http://groups.google.com/group/sqlalchemy. >>>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>>> https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>>>> 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> >>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>> sqlalchemy@googlegroups.com. >>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>> http://groups.google.com/group/sqlalchemy. >>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>> https://groups.google.com/d/optout. >>>>>> >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "sqlalchemy" group. >>>>>> To unsubscribe from this topic, visit >>>>>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>>>>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> <sqlalchemy+unsubscr...@googlegroups.com> >>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>>> sqlalchemy@googlegroups.com. >>>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>>> http://groups.google.com/group/sqlalchemy. >>>>>> For more options, visit <https://groups.google.com/d/optout> >>>>>> https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>>>> 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> >>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>> sqlalchemy@googlegroups.com. >>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>> http://groups.google.com/group/sqlalchemy. >>>>> For more options, visit <https://groups.google.com/d/optout> >>>>> https://groups.google.com/d/optout. >>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "sqlalchemy" group. >>>>> To unsubscribe from this topic, visit >>>>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>>>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. >>>>> To unsubscribe from this group and all its topics, send an email to >>>>> <sqlalchemy+unsubscr...@googlegroups.com> >>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>>> sqlalchemy@googlegroups.com. >>>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>>> http://groups.google.com/group/sqlalchemy. >>>>> For more options, visit <https://groups.google.com/d/optout> >>>>> https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>>> 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> >>>> sqlalchemy+unsubscr...@googlegroups.com. >>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>> sqlalchemy@googlegroups.com. >>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>> http://groups.google.com/group/sqlalchemy. >>>> For more options, visit <https://groups.google.com/d/optout> >>>> https://groups.google.com/d/optout. >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "sqlalchemy" group. >>>> To unsubscribe from this topic, visit >>>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> <sqlalchemy+unsubscr...@googlegroups.com> >>>> sqlalchemy+unsubscr...@googlegroups.com. >>>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>>> sqlalchemy@googlegroups.com. >>>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>>> http://groups.google.com/group/sqlalchemy. >>>> For more options, visit <https://groups.google.com/d/optout> >>>> https://groups.google.com/d/optout. >>>> >>> >>> -- >>> 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 post to this group, send email to <sqlalchemy@googlegroups.com> >>> sqlalchemy@googlegroups.com. >>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>> http://groups.google.com/group/sqlalchemy. >>> For more options, visit <https://groups.google.com/d/optout> >>> https://groups.google.com/d/optout. >>> >>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "sqlalchemy" group. >>> To unsubscribe from this topic, visit >>> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >>> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> <sqlalchemy+unsubscr...@googlegroups.com> >>> sqlalchemy+unsubscr...@googlegroups.com. >>> To post to this group, send email to <sqlalchemy@googlegroups.com> >>> sqlalchemy@googlegroups.com. >>> Visit this group at <http://groups.google.com/group/sqlalchemy> >>> http://groups.google.com/group/sqlalchemy. >>> For more options, visit <https://groups.google.com/d/optout> >>> https://groups.google.com/d/optout. >>> >> >> -- >> 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> >> sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to <sqlalchemy@googlegroups.com> >> sqlalchemy@googlegroups.com. >> Visit this group at http://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "sqlalchemy" group. >> To unsubscribe from this topic, visit >> <https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe> >> https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to <sqlalchemy@googlegroups.com> >> sqlalchemy@googlegroups.com. >> Visit this group at http://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > 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 post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/eThubIMnL4o/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- 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 post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.