web-dev-qa-db-ja.com

SQLの結果をリストに変換するpython

私は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つのelement-listが作成されません。

11
saidozcan

Pythonにイテラブルがある場合、リストを作成するには、単純に the list() built-in を呼び出します。

_list(cursor.fetchall())
_

反復可能オブジェクトは、リストと同じくらい便利である場合が多く、レイジーになる可能性があるため、潜在的に効率的であることに注意してください。

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

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

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

また、doがこのような値のリストを作成する必要がある場合、 list comprehension が最適な方法であることにも注意してくださいリストを作成してから追加するのではなく、.

23
Gareth Latty
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]
5
Sudhakar Ayyar

以下に示すように、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 )
0
Aaron