@34nyan (上杉 ケン)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonでのリスト

Q&A

Closed

pythonでDBのselect結果をカラムごとにリスト化したいのですがうまくいきません。どのように書けばよいでしょうか。
例:以下のようなテーブル
image.png
テーブル AAA

カラム A B C
レコード 1 2 3
レコード 4 5 6

「select * from AAA where A=1」で結果「1,2,3」を「1と2と3」でリストとしたいです。

0 likes

2Answer

下記が分かると回答しやすいので、逆に質問させてください。

  1. データベースは何を使っていますか?

  2. 動かないものでもいいので、現時点で書かれているソースコード、及び表示されているエラーメッセージを可能な限りで見せていただけませんか?

プログラミングに関して質問をする際は、何を試してどのような画面(やメッセージ)が表示されているのかをできるだけ書くようにすることをオススメします。
何が分からないのかによって回答が大きく変わるためです。

現時点では、変数の定義の仕方がわからないのか、pythonソースコードを実行するためのshellコマンドがわからないのか、DBへ接続するためのライブラリの使い方を間違っているのか、など様々な可能性があります。

0Like

Comments

  1. @34nyan

    Questioner

    ご回答ありがとうございます。わかりづらく申し訳ありません。
    1.SQLServerを使っています。
    2.エラーはありません。以下にコードと結果を記載します。
    import pyodbc
    driver='{SQL Server}'
    server = ""
    database = "AAA"
    trusted_connection='yes'

    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';Trusted_Connection='+trusted_connection+';')
    cursor = cnxn.cursor()


    sql ="SELECT * FROM AAA where A='1'"
    rc=cursor.execute(sql)
    fetch_ret = cursor.fetchall()
    list=fetch_ret

    print(list)
    print(list[0])
    print(list[1:2])

    結果
    [('1', '2', '3')]
    ('1', '2', '3')
    []
  2. @34nyan

    Questioner

    丁寧にありがとうございます。
    fetchoneで解決しました。
    ありがとうございます。

ありがとうございます :-)

結果の取得はできているのですね。
あとはデータ形式だけでしょうか。

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')  # タプルのリストではなく、タプルで取得できる
0Like

Comments

  1. すみません、Qiitaの回答者コメントに慣れておらず、何度も投稿したり削除したりしてしまいました、通知が重ねて行ってしまっていたら申し訳ありません 汗

Your answer might help someone💌