pythonでのリスト
Q&A
Closed
pythonでDBのselect結果をカラムごとにリスト化したいのですがうまくいきません。どのように書けばよいでしょうか。
例:以下のようなテーブル
テーブル AAA
カラム A B C
レコード 1 2 3
レコード 4 5 6
「select * from AAA where A=1」で結果「1,2,3」を「1と2と3」でリストとしたいです。
Q&A
Closed
pythonでDBのselect結果をカラムごとにリスト化したいのですがうまくいきません。どのように書けばよいでしょうか。
例:以下のようなテーブル
テーブル AAA
カラム A B C
レコード 1 2 3
レコード 4 5 6
「select * from AAA where A=1」で結果「1,2,3」を「1と2と3」でリストとしたいです。
下記が分かると回答しやすいので、逆に質問させてください。
データベースは何を使っていますか?
動かないものでもいいので、現時点で書かれているソースコード、及び表示されているエラーメッセージを可能な限りで見せていただけませんか?
プログラミングに関して質問をする際は、何を試してどのような画面(やメッセージ)が表示されているのかをできるだけ書くようにすることをオススメします。
何が分からないのかによって回答が大きく変わるためです。
現時点では、変数の定義の仕方がわからないのか、pythonソースコードを実行するためのshellコマンドがわからないのか、DBへ接続するためのライブラリの使い方を間違っているのか、など様々な可能性があります。
@34nyan
Questioner
@34nyan
Questioner
ありがとうございます :-)
結果の取得はできているのですね。
あとはデータ形式だけでしょうか。
list[0]がレコード(1, 2, 3)
(以下、レコードXと呼びます)のタプルになっていますので、すでに取得できているようです。
例えば、このレコードXの(2, 3)
の部分を取得したければ、
print(list) # [('1', '2', '3')]
print(list[0]) # ('1', '2', '3')
print(list[0][1:2]) # ('2', '3')
としてみてください。
list
がレコードXを表しているわけではなく、list[0]
がレコードXを表すことに気をつけてください。
わかりづらければ、
list = fetch_ret
print(list)
record_x = list[0]
print(record_x)
part_of_record_x = record_x[1:2]
print(part_of_record_x)
などと表記してみるととわかりやすいかもしれません。
fetchall()
というメソッドは複数レコードをまとめて取得するメソッドですので、結果はタプルのリストとなります。
今回は検索条件に合致するものがたまたま1件しかありませんので、list
にはタプルが1件だけ入ったリストが代入されますが、例えば
sql ="SELECT * FROM AAA" # 検索条件を外した
rc=cursor.execute(sql)
fetch_ret = cursor.fetchall()
list=fetch_ret
print(list)
# [('1', '2', '3'), ('4', '5', '6')]
# list[0]がレコードXを表し、list[1]が別のレコードYを表している
などとしてみると、list
は単一のレコードを表しておらず、複数のレコードのリストになってることがわかると思います。
複数のレコード(タプルのリスト)ではなく、単一のレコード(タプル)のみデータを取得したい場合は、fetchone()
というメソッドを使ってみてください。
sql ="SELECT * FROM AAA where A='1'"
rc=cursor.execute(sql)
fetch_ret = cursor.fetchone() # fetchallではなくfetchoneにした
print(fetch_ret) # ('1', '2', '3') # タプルのリストではなく、タプルで取得できる