Re: pyodbc connect string

Discussion in 'Python' started by Larry Martell, Apr 30, 2014.

  1. On Tue, Apr 29, 2014 at 7:14 PM, Ben Finney <> wrote:
    > Larry Martell <> writes:
    >
    >> I am having a problem building a connect string for pyodbc. It works
    >> when everything is hard coded, but if I build the connect string it
    >> fails.
    >>
    >> This works:
    >>
    >> pyodbc.connect('DRIVER=FreeTDS;' 'SERVER=xx.xx.xx.xx;' 'PORT=1433;'
    >> 'DATABASE=blah;' 'UID=foo;' 'PWD=bar;')

    >
    > This calls the function with a single string,
    > "DRIVER=FreeTDS;SERVER=xx.xx.xx.xx;PORT=1433;DATABASE=blah;UID=foo;PWD=bar;".
    >
    > Remember that consecutive, whitespace-separated, quote-delimited
    > fragments specify the construction of a single string literal::
    >
    > >>> 'foo'

    > 'foo'
    > >>> 'foo' 'bar'

    > 'foobar'
    > >>> 'foo' 'bar' 'baz'

    > 'foobarbaz'
    >
    > See the reference for how this concatenation occurs
    > <URL:https://docs.python.org/3/reference/lexical_analysis.html#string-literal-concatenation>.
    >
    >> But this does not:
    >>
    >> pyodbc.connect(conn_str)
    >>
    >> Where conn_str is:
    >>
    >> 'DRIVER=FreeTDS;' 'SERVER=xx.xx.xx.xx;' 'PORT=1433;' 'DATABASE=blah;'
    >> 'UID=foo;' 'PWD=bar;'

    >
    > This string is different, because it contains a whole lot of quotation
    > marks and whitespace not in the string you show in the first example.
    >
    >> conn_str is constructed with:
    >>
    >> conn_str = "'DRIVER=%s;' 'SERVER=%s;' 'PORT=%s;' 'DATABASE=%s;'
    >> 'UID=%s;' 'PWD=%s;'" \
    >> % (RECIPE_DB['DRIVER'], RECIPE_DB['SERVER'],
    >> RECIPE_DB['PORT'], RECIPE_DB['DATABASE'],
    >> RECIPE_DB['USER'], RECIPE_DB['PASSWORD'])

    >
    > Remove the extraneous quotes and whitespace, which were not in the
    > original string you showed above.
    >
    > On a separate point: Since you have string keys for the mapping, you can
    > make the interpolation more readable::
    >
    > conn_str = (
    > "DRIVER=%(DRIVER)s;SERVER=%(SERVER)s;PORT=%(PORT)s;"
    > "DATABASE=%(DATABASE)s;UID=%(USER)s;PWD=%(PASSWORD)s;"
    > ) % RECIPE_DB
    >
    > since the named placeholders will be looked up by key in the ‘RECIPE_DB’
    > mapping.
    >
    > There are other improvements to suggest, but I don't want to distract
    > from the main point of the post.


    Thanks for the explanation.
     
    Larry Martell, Apr 30, 2014
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. timw.googlepost

    installing pyodbc

    timw.googlepost, Apr 11, 2006, in forum: Python
    Replies:
    0
    Views:
    357
    timw.googlepost
    Apr 11, 2006
  2. iMath
    Replies:
    1
    Views:
    915
    Dennis Lee Bieber
    Oct 17, 2012
  3. Larry Martell

    pyodbc connect string

    Larry Martell, Apr 30, 2014, in forum: Python
    Replies:
    0
    Views:
    49
    Larry Martell
    Apr 30, 2014
  4. Chris Angelico

    Re: pyodbc connect string

    Chris Angelico, Apr 30, 2014, in forum: Python
    Replies:
    0
    Views:
    54
    Chris Angelico
    Apr 30, 2014
  5. Larry Martell

    Re: pyodbc connect string

    Larry Martell, Apr 30, 2014, in forum: Python
    Replies:
    0
    Views:
    66
    Larry Martell
    Apr 30, 2014
Loading...

Share This Page