使用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”]
答案 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>