Im working on getting off bitbucket but maybe it's an ad blocker? try a private window or something
On Mon, Oct 8, 2018 at 6:36 PM Lukasz Szybalski <szybal...@gmail.com> wrote: > > > On Mon, Oct 8, 2018 at 9:56 AM Mike Bayer <mike...@zzzcomputing.com> > wrote: > >> >> >> On Mon, Oct 8, 2018 at 10:28 AM Lukasz Szybalski <szybal...@gmail.com> >> wrote: >> >>> >>> I have a query in sqlalchemy like below where I lookup contract# in >>>>>>> mssql. How do I enforce the varchar instead of nvarchar? I tried >>>>>>> converting >>>>>>> my field to "str(mycurrent)" but that didn't do anything. Is there some >>>>>>> other spot to force VARCHAR to be sent? >>>>>>> >>>>>> >>>>>> >>>>>> this just came up in >>>>>> https://bitbucket.org/zzzeek/sqlalchemy/issues/4161/sql-server-string-use-case, >>>>>> in that case they are using typed parameters: >>>>>> >>>>>> String(50, convert_unicode='force') >>>>>> >>>>>> if you're dealing w/ the raw string like that try this: >>>>>> >>>>>> execute(text("select ... where foo = >>>>>> :mycurrent").bindparams(bindparam("mycurrent", >>>>>> type_=String(convert_unicode='force'))) >>>>>> >>>>>> let me know if that works b.c. this has to be in the docs >>>>>> >>>>> >> >> you need to use the text() construct as I illustrated earlier: >> >> session.execute( >> text("select ... where foo = >> :mycurrent").bindparams(bindparam("mycurrent", >> type_=String(convert_unicode='force')), >> params={"mycurrent": "value"} >> ) >> >> >> >> >> >> >>> >>> >>>> You can find that the query that uses NVARCHAR does an index scan has >>>> 30,909 logical reads on the dbo.P table. It also uses 890 ms of CPU and >>>> has a total elapsed time of 938 ms. >>>> >>>> The query that uses VARCHAR does an index seek and has 7 logical reads >>>> on the dbo.P table. It uses 0 ms of CPU and has a total elapsed time of 11 >>>> ms. >>>> >>>> >>>> p=*session.execute*("select PZ.p_id,PZ.pimage_num from dbo.P >>>> with(nolock) inner join dbo.PZ PZ with(nolock) on PZ.p_id = p.p_id inner >>>> join dbo.D D with(nolock) on D.p_id = p.p_id AND D.pimage_num=PZ.pimage_num >>>> where p.current=:mycurrent and D.srtype_id >>>> =5",params={'mycurrent':str(mycurrent)}).fetchall() >>>> >>>> >>>> >>>> >>>> >>>> [image: Inline image 1] >>>> >>>> >>>> >>>> > SUPER FAST..now.!!! > (I wonder what would be a side effect if this was done by default? aka > user varchar) > > For Reference: I'll I split into two lines because for some reason I was > making some mistake and had to google my way out of it. > > Version1 (easier to understand and test) > > *from sqlalchemy import text, bindparam,String* > # ":mycontract" and "mycontract" parts bound by the bindparams to create > a statemetn query. > *# item in bold is what is required to get it to convert from nvarchar to > varchar* > stmt= text("select P.contract_id from dbo.P P with(NOLOCK) where > currentstatus_id in (1,2) and current_cuntract=:mycontract"). > *bindparams(bindparam("mycontract",type_=String(50,convert_unicode='force')))* > #We now execute the statement from above and bind it to a variable I'm > passing row.mycontract from our forloop. > p=session.execute(stmt,params={'mycontract':row.mycontract}).fetchall() > > This causes the value to be varchar instead of nvarchar which fixes mssql : > "NVARCHAR cause performance downgrade because NVARCHAR literals do not > use VARCHAR indexes. When we add convert_unicode='force' all our > N'something' turns into 'something' and gains performance from indexes." > > https://bitbucket.org/zzzeek/sqlalchemy/issues/4161/sql-server-string-use-case > > **Can you post above as comment to bitbucket ticket. I can't register it > says "are you sure you are not a robot" with no other option ;) lol . I > guess they don't get many new accounts lol > > Thank you sqlalchemy! > Lucas > -- > http://lucasmanual.com/ <http://lucasmanual.com/blog/> > > > >> >>> >>> >>> -- >>> SQLAlchemy - >>> The Python SQL Toolkit and Object Relational Mapper >>> >>> http://www.sqlalchemy.org/ >>> >> > > -- > http://lucasmanual.com/ <http://lucasmanual.com/blog/> > > -- > 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 post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- 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 post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.