3

我正在从 python 执行一个简单的 mssql 查询。我可以在探查器中看到查询到达数据库。查询有 1 行答案。我在 Python shell 中看不到输出

我运行下面的代码

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']) 

请指教谢谢,阿萨夫

4

2 回答 2

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()
于 2011-02-15T14:21:07.687 回答
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()   

这个for对 的结果进行循环cur.execute(),但我真的不建议这样做

(小附录:我忘记了 fetchall 的,我已经习惯把它放在一个函数中了。对不起)

于 2011-02-15T14:02:36.257 回答