16

Pythonの初心者です。SQLの結果をリストに変換したいと思います。コードは次のとおりです。

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

options = list()

for i,row in enumerate(cursor.fetchall()):
   options.append(row[i])

私のテーブルには6つの列がありますが、このコードは6つの要素リストを作成しません。どこで間違っているのですか?

4

5 に答える 5

34

Pythonでイテラブルを使用している場合、リストを作成するにはlist()組み込みの:を呼び出すだけです。

list(cursor.fetchall())

iterableは多くの場合、リストと同じくらい便利であり、怠惰になる可能性があるため、より効率的である可能性があることに注意してください。

元のコードはあまり意味がないため失敗します。行をループして列挙すると(0, first_row), (1, second_row)、などが得られます。これは、各n行目のn番目の項目のリストを作成していることを意味しますが、これはまったく望んでいないことです。

このコードはいくつかの問題を示しています。まず、list()引数がない場合は、[]読みやすいため、通常は空のリストリテラル()に置き換える方が適切です。

次に、インデックスでループしようとしています。これはPythonでは悪い考えです。値を取得するために使用するインデックスではなく、値自体をループします。

また、このような値のリストを作成する必要がある場合は、リストを作成してから追加するのではなく、リスト内包表記が最善の方法であることに注意してください。

于 2013-02-12T15:25:47.830 に答える
12
cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

result = cursor.fetchall() //result = (1,2,3,) or  result =((1,3),(4,5),)

final_result = [list(i) for i in result]
于 2017-11-06T11:27:29.923 に答える
10

Sudhakar Ayyarからの回答を使用した場合、結果は.fetchall()によって作成されたタプルのリストではなく、リストのリストになりました。これはまだ私が望んでいたものではありませんでした。彼のコードに少し変更を加えるだけで、SQLクエリからのすべてのデータを含む簡単なリストを取得できました。

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

result = cursor.fetchall() //result = (1,2,3,) or  result =((1,3),(4,5),)

final_result = [i[0] for i in result]

さらに、最後の2行を組み合わせて次のようにすることができます。

final_result = [i[0] for i in cursor.fetchall()]
于 2020-02-05T18:56:13.367 に答える
0

以下に示すように、list(cursor)を呼び出すだけで済みます。

import pymysql

# Create the database connection.
# The connection parameters are host, port, user, password, and database.
# These parameters in this code are held in the app.config().
dump_conn = pymysql.connect(
    host=app.config[ 'DUMP_SQLALCHEMY_HOST' ],
    port=int( app.config[ 'DUMP_SQLALCHEMY_PORT' ] ),
    user=vault[ 'data' ][ 'username' ],
    passwd=vault[ 'data' ][ 'password' ],
    db=app.config[ 'DUMP_SQLALCHEMY_DB' ]
)

# Grab the query from a sql_queries helper file.
sql_query = query_transactions_for_csv()

# From the connection get a cursor.
dump_cursor = dump_conn.cursor()

# Handle the cursor.close() with a 'with' statement.
with dump_cursor as cursor:

    # Execute the query.
    cursor.execute( sql_query )

    # Use list( cursor ) to get a Python list.
    rows = list( cursor )
于 2018-12-10T18:53:45.053 に答える
0

ストアドプロシージャを使用している場合は、結果を次のようにリストに変換できます。


cursor = connection.cursor()
parameters = []
cursor.callproc('spProcedureName', parameters)
resultList =[r.fetchall() for r in cursor.stored_results()][0]
cursor.close()

于 2020-06-18T09:51:18.890 に答える