alh*_*alh 6 python sql sybase-ase
我目前正在使用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')
Run Code Online (Sandbox Code Playgroud)
工作正常.更改任何连接详细信息会导致连接错误.
然后我选择一个数据库:
curr = conn.cursor()
curr.execute('use db_1')
Run Code Online (Sandbox Code Playgroud)
但是,现在当我尝试运行查询时,它总是会返回 None
print curr.execute('select * from table_1')
Run Code Online (Sandbox Code Playgroud)
我试过在同一个地方运行use和select查询execute,我试过go在每次之后都包含命令,我curr.connection.commit()在每次尝试后都试过,都没有成功.我已经确认,使用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
Run Code Online (Sandbox Code Playgroud)
我不得不将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)
Run Code Online (Sandbox Code Playgroud)
我完全理解您可能会对文档感到困惑的地方。它似乎与其他数据库扩展(例如 psycopg2)不相上下。
当与大多数标准数据库扩展连接时,您可以指定一个数据库。然后,当您想从查询中获取数据时SELECT,您可以使用 fetch (一种不错的方法)或迭代器(更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
Run Code Online (Sandbox Code Playgroud)
尝试一下,让我们知道它是否有效。