0

私は次のコードを持っています(私はこれを正しいスタイルで機能させる方法を知っていますが、質問をしてどこが間違っているかを理解するためだけに例として引用しました):

import MySQLdb
import MySQLdb.cursors
connection = MySQLdb.connect(
        host=host, port=port, user=username, passwd=password, db=database, 
        cursorclass=MySQLdb.cursors.SSCursor)
cursor = connection.cursor()
sql = 'SELECT * FROM EXAMPLE_TABLE'
cursor.execute(sql)

def gen():
    yield cursor.fetchmany(5)

for i in gen():
    print i

そして2番目:

def gen():
    yield 'spam'

for i in gen():
    print i

# Process finished with exit code 0

2 番目の例が 1 回で終了する理由がわかりませんが、最初の例は 1 回実行された後、フリーズして何もしません。終了コード 0 で停止しないのはなぜですか?

奇妙な動作: 2 番目の例で、cycle の前に次の行を追加すると、「spam」と「freezes」も出力されます。

connection = MySQLdb.connect(
        host=host, port=port, user=username, passwd=password, db=database, 
        cursorclass=MySQLdb.cursors.SSCursor)
cursor = connection.cursor()
sql = 'SELECT * FROM EXAMPLE_TABLE'
cursor.execute(sql)

更新 の回答: 接続が閉じられている限り、Python はプログラムから出てきません。

4

1 に答える 1

1

i think what you should do in first case is

result = cursor.fetchmany(5)

for item in result:
    yield item

fetchmany method fetches the next set of rows of a query results, returning a list of tuples.

An empty list is returned when no more rows are available.

于 2013-02-24T09:47:54.220 に答える