我目前正在使用sybpydb连接到Sybase 15.7服务器。好像连接得很好:
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')
工作正常。更改任何连接详细信息都会导致连接错误。
然后我选择了一个数据库:
curr = conn.cursor()
curr.execute('use db_1')
但是,现在当我尝试运行查询时,它总是返回None
print curr.execute('select * from table_1')
我尝试在同一个use
中运行select
和execute
个查询,我尝试在每个go
之后包含curr.connection.commit()
个命令,我尝试使用{{1}在每次之后,都没有成功。我已使用dbartisan
和isql
确认我使用的相同查询返回条目。
为什么我没有在python中获得查询结果?
编辑:
只是一些额外的信息。为了使sybpydb
导入起作用,我不得不更改两个环境变量。我将lib路径(我添加到sys.path
的路径)添加到$LD_LIBRARY_PATH
,即:
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
我必须将SYBASE
路径从12.5更改为15.7。所有这些都是在csh
中完成的。
如果我打印conn.error(),在每个curr.execute()之后,我得到:
("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)
答案 0 :(得分:1)
我完全明白你可能会对文档感到困惑。它似乎与其他数据库扩展(例如psycopg2)不相上下。
连接大多数标准数据库扩展时,您可以指定数据库。然后,当您想要从SELECT
查询中获取数据时,您可以使用fetch(以 ok 方式执行此操作)或迭代器(更多pythonic 方式去做。)
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
尝试一下,让我们知道它是否有效。
答案 1 :(得分:0)
Python 3.x 工作解决方案:
import sybpydb
try:
conn = sybpydb.connect(dsn="Servername=serv;Username=usr;Password=pass")
cur = conn.cursor()
cur.execute('select * from db_1..table_1')
# table header
header = tuple(col[0] for col in cur.description)
print('\t'.join(header))
print('-' * 60)
res = cur.fetchall()
for row in res:
line = '\t'.join(str(col) for col in row)
print(line)
cur.close()
conn.close()
except sybpydb.Error:
for err in cur.connection.messages:
print(f'Error {err[0]}, Value {err[1]}')