3

Python から単純な mssql クエリを実行しています。クエリが DB に到達することをプロファイラーで確認できます。クエリには 1 行の回答があります。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']) 

助言してください ありがとう、アサフ

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 に答える