2

MySQL接続は1ループサイクル後に閉じます。私はおそらくmysqlオブジェクトの使用法に何か問題があります。1サイクル出力した後、エラーで終了します。

これは私のコードです:

cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()

fetch_ids = cnx.cursor()
query = ("SELECT * FROM items WHERE has_recipe = 1")
fetch_ids.execute(query)

count = 0
for (data) in fetch_ids:
    fetch_details = cnx.cursor()
    query = ("SELECT * FROM recipes WHERE recipe_id = " + str(data[1]))
    fetch_details.execute(query)

私が得るエラーは次のとおりです。

Traceback (most recent call last):
  File "trade.py", line 47, in <module>
    fetch_details = cnx.cursor()
  File "/Users/allendar/Desktop/mysql/connector/connection.py", line 1076, in cursor
    raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.
4

2 に答える 2

4

MySQLは実際のカーソルをサポートしておらず、ライブラリはそれらをエミュレートするだけです。そのため、一度に接続ごとに実行できるカーソルは1つだけです。

ループでは、2番目のカーソルを開いていますが、これはMySQLで処理できるものではありません。新しいクエリにカーソルを使用する前に、最初のクエリからすべての行を読み取ります。

于 2013-01-28T15:30:33.773 に答える
3

cnx.cursor()を何度も呼び出しています。実行しているように最初にカーソルを呼び出して、同じオブジェクトを次のクエリに再利用します。dbの処理が終了したら、セッションをクリーンアップするためにcnx.close()をどこかに置くことを忘れないでください。

于 2013-01-28T15:21:14.950 に答える