みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLiteでフィールド名を得る方法はありますか?

c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
すると、date, trans, symbol, qty, price等のフィールドが用意されます。

c.execute("SELECT * FROM stocks")

すると、その登録内容を得ることが出来ます。

ところで、登録内容を得る前に、選ばれる対象となる"date","trans", ...等のフィールド名を得る方法はありませんか。

環境はWindows、Python 2.7です。

投稿日時 - 2014-12-30 00:12:46

QNo.8874447

暇なときに回答ください

質問者が選んだベストアンサー

cがsqlite3.Cursorだとして。

c.execute("SELECT * FROM stocks")
に成功した後で、c.descriptionを調べることでわかります。
http://docs.python.jp/2/library/sqlite3.html#sqlite3.Cursor.description

r=c.fetchione()
等としたときの r は sqlite3.Row のオブジェクトになります。
http://docs.python.jp/2/library/sqlite3.html#row
Rowにはkeysメソッドがあります
http://docs.python.jp/2/library/sqlite3.html#sqlite3.Row.keys

もし、簡単な参考書とかしか読んでいないのなら、公式マニュアルも読むことをお勧めします。


> 最初のRecord Setが(date,qty) = ("2014/12/1", 5)の場合

この例は「登録内容を得た後」だと思うのですが。
前と後、どちらなのでしょうか?

投稿日時 - 2014-12-30 05:50:44

補足

成功しました。

ありがとうございました。

投稿日時 - 2014-12-30 07:30:59

お礼

返答ありがとうございます


>この例は「登録内容を得た後」だと思うのですが。
>前と後、どちらなのでしょうか?

ネット上の例を使ってスクリプトを書いています。SQL初心者なので用語の使い方から不適切かもしれません。

(1)
CREATE TABLEして
INSERT INTOして登録します
コミットしてデータベース作成を完了します。

(2)
データベースを開いて
SELECT文を実行します
上記SELECT文にて「登録内容を得た後」に
SELECT文で得られたフィールドの名前を得たい ←ここです

教えてもらった場所を、今から調べてみます。

投稿日時 - 2014-12-30 07:13:03

ANo.2

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

PRAGMA table_info('テーブル名');
で指定したテーブルのフィールドの情報を取得できます。
取得した情報の意味はこちらを参照してください。
http://program.station.ez-net.jp/special/sql/sqlite/columns.asp

投稿日時 - 2014-12-30 01:19:00

お礼

返答ありがとうございます


私の説明に不明確な部分がありました。

次はJavaScript、ODBCでの例です。

var rs = cn.Execute("SELECT date, qty FROM stocks;")

成功し、最初のRecord Setが(date,qty) = ("2014/12/1", 5)の場合は

rs.Fields.Count = 2
rs.Fields(0).Name = "date"
rs.Fields(1).Name = "qty"
rs.Fields(0).Value = "2014/12/1"
rs.Fields(1).Value = "5"

となります。
この、
  JavaScript、ODBCでのNameプロパティに対応するものが、
  Python、SQliteで存在するのか、存在するとしてその方法を知りたいです。

SELECT命令で、選ぶフィールドを指定しているので、必要ないと思うかもしれませんが、お願いします。

投稿日時 - 2014-12-30 04:58:05

あなたにオススメの質問