On Sun, Sep 5, 2021 at 1:26 PM DFS <nos...@dfs.com> wrote: > > On 9/3/2021 9:50 AM, Chris Angelico wrote: > > On Fri, Sep 3, 2021 at 11:37 PM DFS <nos...@dfs.com> wrote: > >> > >> On 9/3/2021 1:47 AM, Chris Angelico wrote: > >>> On Fri, Sep 3, 2021 at 3:42 PM DFS <nos...@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 -- https://mail.python.org/mailman/listinfo/python-list