Sybpydb错误5701有时会被忽略

时间:2016-07-14 07:28:50

标签: python sybase sybase-ase

使用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(“服务器消息:数字(5701)严重性(10)状态(2)行(0)\ n \ t将数据库上下文更改为”主“。\ n \ n”,“5701”]

     

查询返回-1行

     

(查询1的结果集)

     

执行table2

     

[DatabaseError(“服务器消息:数字(5701)严重性(10)状态(2)行(0)\ n \ t将数据库上下文更改为”主“。\ n \ n”,“5701”]

     

查询返回-1行

     

(query2的结果集)

     

[DatabaseError(“服务器消息:数字(5701)严重性(10)状态(2)行(0)\ n \ t将数据库上下文更改为”主“。\ n \ n”,“5701”]

1 个答案:

答案 0 :(得分:0)

使用sybpydb时我从未收到过这样的消息,我不打印cur.connection.errors(),这不是记录的methods之一(当我尝试使用时我甚至出错了)它)

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

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

2-更改数据库上下文时...通过指定"数据库来执行..."

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

<input type="password" class="form-control" placeholder="Enter your Password" name="password"/>

或在ASE 15.7中:

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

然后您的查询应如下所示:

alter login <uname> modify default database <database>