Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sybase sybpydb queries not returning anything

I am currently connecting to a Sybase 15.7 server using sybpydb. It seems to connect fine:

import sys
sys.path.append('/dba/sybase/ase/15.7/OCS-15_0/python/python26_64r/lib')
sys.path.append('/dba/sybase/ase/15.7/OCS-15_0/lib')
import sybpydb

conn = sybpydb.connect(user='usr', password='pass', servername='serv')

is working fine. Changing any of my connection details results in a connection error.

I then select a database:

curr = conn.cursor()
curr.execute('use db_1')

however, now when I try to run queries, it always returns None

print curr.execute('select * from table_1')

I have tried running the use and select queries in the same execute, I have tried including go commands after each, I have tried using curr.connection.commit() after each, all with no success. I have confirmed, using dbartisan and isql, that the same queries I am using return entries.

Why am I not getting results from my queries in python?

EDIT:

Just some additional info. In order to get the sybpydb import to work, I had to change two environment variables. I added the lib paths (the same ones that I added to sys.path) to $LD_LIBRARY_PATH, i.e.:

setenv LD_LIBRARY_PATH "$LD_LIBRARY_PATH":dba/sybase/ase/15.7/OCS-15_0/python/python26_64r/lib:/dba/sybase/ase/15.7/OCS-15_0/lib

and I had to change the SYBASE path from 12.5 to 15.7. All this was done in csh.

If I print conn.error(), after every curr.execute(), I get:

("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)
like image 926
alh Avatar asked Dec 21 '12 00:12

alh


1 Answers

I completely understand where you might be confused by the documentation. Its doesn't seem to be on par with other db extensions (e.g. psycopg2).

When connecting with most standard db extensions you can specify a database. Then, when you want to get the data back from a SELECT query, you either use fetch (an ok way to do it) or the iterator (the more pythonic way to do it).

import sybpydb as sybase

conn = sybase.connect(user='usr', password='pass', servername='serv')
cur = conn.cursor()

cur.execute("use db_1")
cur.execute("SELECT * FROM table_1")
print "Query Returned %d row(s)" % cur.rowcount

for row in cur:
    print row

# Alternate less-pythonic way to read query results
# for row in cur.fetchall():
#    print row

Give that a try and let us know if it works.

like image 189
bitcycle Avatar answered Sep 19 '22 17:09

bitcycle