无法在Python中查看数据库查询输出

3 投票
2 回答
4632 浏览
提问于 2025-04-16 11:52

我在用Python执行一个简单的mssql查询。
我在监控工具中看到这个查询已经到达数据库。
这个查询返回了一行结果。
但是我在Python的命令行中看不到输出。

我运行了下面的代码:

import pymssql 
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase', as_dict=True) 
cur = conn.cursor()  
cur.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') 
for row in cur:     
    print "ID=%d, Name=%s" % (row['id'], row['name']) 

请给我一些建议。
谢谢,
Assaf

2 个回答

1
import pymssql  
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase', as_dict=True)  
cur = conn.cursor()   
users = cur.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe').fetchall()  
conn.close()   

for row in users:     
    print "ID=%d, Name=%s" % (row['id'], row['name'])

试着把结果赋值给某个东西,而不是直接用游标。

cur.execute() 是一个函数,它确实会返回一个值(你已经看到过了),但是你没有把这个值赋给任何变量,所以当你想用 for 循环的时候,就没有东西可以循环。

如果你不想保存结果,可以这样做(虽然有点乱):

import pymssql  
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase', as_dict=True)  
cur = conn.cursor() 
sql = 'SELECT * FROM persons WHERE salesrep=%s'

for row in cur.execute(sql, 'John Doe').fetchall():
    print "ID=%d, Name=%s" % (row['id'], row['name'])

conn.close()   

这个方法是对 cur.execute() 的结果进行 for 循环,但我真的不推荐这样做。

(小补充:我忘记加 fetchall 了,我习惯把这个放在一个函数里。抱歉)

3

你可以在执行完查询后,使用 fetchone() 或者 fetchall() 来获取查询到的数据。

import pymssql 
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase', as_dict=True) 
cur = conn.cursor()  
cur.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') 
print cur.fetchall()

撰写回答