は現在、私は次のコードを持っている:名前で列を選択するにはどうすればいいですか? (パイソン&SQLite3の)
c.execute("SELECT * FROM table")
for row in c.fetchall():
print row[0]
print row[1]
しかし、私は私のテーブルの構造を変更し、今私は、この変更を表すために、インデックス値を変更する必要があります。代わりに列名を使用する方法はありますか?
は現在、私は次のコードを持っている:名前で列を選択するにはどうすればいいですか? (パイソン&SQLite3の)
c.execute("SELECT * FROM table")
for row in c.fetchall():
print row[0]
print row[1]
しかし、私は私のテーブルの構造を変更し、今私は、この変更を表すために、インデックス値を変更する必要があります。代わりに列名を使用する方法はありますか?
sqlite3モジュールのドキュメントのRow Objectsを参照してください。 sqlite3.Row
row_factoryを使用すると、通常のタプルよりもわずかに強力なオブジェクトが返されます。少しオーバーヘッドが高いので、デフォルトの動作ではないと思います。このため
は、SELECT
をやったときに、常に明示的な列名を使用することを推奨されていない:
c.execute("SELECT color, fluffiness FROM table")
for row in c.fetchall():
print row[0] # <-- is always guaranteed to be the color value
print row[1]
これも良い答えです。またはそれらのいくつかの組み合わせ。それは大規模なテーブルのすべての列を取得しているあなたの痛みになることができますが。 – Iguananaut
んが本当の高いオーバーヘッドは、docによると:_ "行は、インデックスベースと大文字と小文字を区別しない名前の両方を提供します**メモリのオーバーヘッドがほとんどない**カラムへのアクセス**これはおそらく独自のカスタム辞書ベースのアプローチやdb_rowベースのソリューションより優れています。 "_ http://docs.python.org/3/library /sqlite3.html#sqlite3.Connection.row_factory – JeromeJ
これは意味があります - 私はコードを見ていませんが、おそらく '__getitem__'を使って列名を対応するインデックスにマップするだけです。 – Iguananaut