Connecting python to DB2 database

Chris Angelico rosuav at gmail.com
Sat Sep 4 23:39:33 EDT 2021


On Sun, Sep 5, 2021 at 1:26 PM DFS <nospam at dfs.com> wrote:
>
> On 9/3/2021 9:50 AM, Chris Angelico wrote:
> > On Fri, Sep 3, 2021 at 11:37 PM DFS <nospam at dfs.com> wrote:
> >>
> >> On 9/3/2021 1:47 AM, Chris Angelico wrote:
> >>> On Fri, Sep 3, 2021 at 3:42 PM DFS <nospam at dfs.com> wrote:
> >>>>
> >>>> Having a problem with the DB2 connector
> >>>>
> >>>> test.py
> >>>> ----------------------------------------------------------------
> >>>> import ibm_db_dbi
> >>>> connectstring =
> >>>> 'DATABASE=xxx;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=xxx;PWD=xxx;'
> >>>> conn = ibm_db_dbi.connect(connectstring,'','')
> >>>>
> >>>> curr  = conn.cursor
> >>>> print(curr)
> >>>
> >>> According to PEP 249, what you want is conn.cursor() not conn.cursor.
> >>>
> >>> I'm a bit surprised as to the repr of that function though, which
> >>> seems to be this line from your output:
> >>>
> >>> <ibm_db_dbi.Connection object at 0x000002154D2FED30>
> >>>
> >>> I'd have expected it to say something like "method cursor of
> >>> Connection object", which would have been an immediate clue as to what
> >>> needs to be done. Not sure why the repr is so confusing, and that
> >>> might be something to report upstream.
> >>>
> >>> ChrisA
> >>
> >>
> >> Thanks.  I must've done it right, using conn.cursor(), 500x.
> >> Bleary-eyed from staring at code too long I guess.
> >
> > Cool cool! Glad that's working.
> >
> >> Now can you get DB2 to accept ; as a SQL statement terminator like the
> >> rest of the world?   They call it "An unexpected token"...
> >>
> >
> > Hmm, I don't know that the execute() method guarantees to allow
> > semicolons. Some implementations will strip a trailing semi, but they
> > usually won't allow interior ones, because that's a good way to worsen
> > SQL injection vulnerabilities. It's entirely possible - and within the
> > PEP 249 spec, I believe - for semicolons to be simply rejected.
>
>
> The default in the DB2 'Command Line Plus' tool is semicolons aren't
> "allowed".
>

Yeah, but that's a REPL feature. In Python, the end of a command is
signalled by the end of the string; if you want a multiline command,
you have a string with multiple lines in it. Command line SQL has to
either force you to one line, or have some means of distinguishing
between "more text coming" and "here's a command, run it".

ChrisA


More information about the Python-list mailing list