【问题标题】:Sybpydb error 5701 ignored sometimesSybpydb 错误 5701 有时被忽略
【发布时间】:2016-07-14 07:28:49
【问题描述】:

我在使用 Sybase ASE 15.7 数据库和 sybpydb 库在 Python (2.7.11) 中开发应用程序时遇到了一个非常奇怪的行为。

从数据库中选择数据时,总是会抛出一个错误 5701,这不是错误,而只是客户端已登录或更改数据库的信息性消息。

这应该被客户忽略,它大部分时间都可以正常工作,但有时不能。

有没有人遇到过这个问题并知道解决方法? 我不想停止处理异常。

下面的代码说明了问题,前两个查询正常运行,但最后一个不起作用,我检查了查询,是的,它返回一个结果集。

uname = 'username'
pwd = 'password'
server = 'server'


conn = sybpydb.connect(user=uname, password=pwd, servername=server)
cur = conn.cursor()
try:
    sql = 'select * from database..table1'
    cur.execute(sql)
    print 'Execute for table1'
    print cur.connection.errors()
    
    row = cur.fetchone()
    print "Query Returned %d row(s)" % cur.rowcount
    print row
except sybpydb.Error:
    print cur.connection.errors()
finally:
    cur.close()
    conn.close()


conn = sybpydb.connect(user=uname, password=pwd, servername=server)
cur = conn.cursor()
parameter1 = 'DSE'
try:
    sql = 'select * from database..table2 where column1 = ?'
    cur.execute(sql, [parameter1])
    print 'Execute for table2'
    print cur.connection.errors()

    row = cur.fetchone()
    print "Query Returned %d row(s)" % cur.rowcount
    print row
except sybpydb.Error:
    print cur.connection.errors()
finally:
    cur.close()
    conn.close()

parameter1 = 1
parameter2 = 1
conn = sybpydb.connect(user=uname, password=pwd, servername=server)
cur = conn.cursor()
try:
    sql = 'select * from database..table3 where column1 = ? and column2 ?'
    cur.execute(sql, [parameter1, parameter2])
    print 'Execute for table3'
    print cur.connection.errors()

    row = cur.fetchone()
    print "Query Returned %d row(s)" % cur.rowcount
    print row
except sybpydb.Error:
    print cur.connection.errors()
finally:
    cur.close()
    conn.close()

这三个对数据库的调用导致了这个。

为 table1 执行

[DatabaseError("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)]

查询返回 -1 行

(查询 1 的结果集)

为 table2 执行

[DatabaseError("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)]

查询返回 -1 行

(查询2的结果集)

[DatabaseError("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)]

【问题讨论】:

    标签: python sybase sap-ase


    【解决方案1】:

    我在使用 sybpydb 时从未收到此类消息,我不打印 cur.connection.errors() ,这不是记录在案的methods 之一(我什至在尝试使用时遇到错误)

    在所有情况下,您可能会收到此消息,作为 Sybase ASE 的一部分,通知客户端:

    1- 登录时的默认数据库 - 我认为这不适用于 python。

    2- 当您通过指定“数据库..”更改数据库上下文时..

    要消除此消息,只需为您用来连接的用户设置一个默认数据库作为目标数据库,因此,您的连接将在登录后立即位于该数据库中,您无需指定数据库在查询中,更改默认数据库以供登录使用:

    sp_modifylogin <uname>, defdb, "<database>"
    

    或在 ASE 15.7 中:

    alter login <uname> modify default database <database>
    

    那么您的查询应该如下所示:

    sql = 'select * from table3 where column1 = ? and column2 ?'
    

    【讨论】:

    • 我昨天居然解决了。问题是我使用了 cur.connection.errors(),我不知道我从哪里得到的。在 5701 之后还有另一个错误没有被打印出来。当我把它整理出来时,应用程序可以正常工作。不幸的是,该应用程序此时使用的是通用用户,所以我现在必须使用 5701。
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2010-10-04
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多