これが、ちょっと想定外の記述方法で驚きましたわ。
insertで変数を使うテクは良く見かけるけれど、whereではあまりなかったのだ。
def test(self,instruments):
中略
cur.execute("""select * from rate where instrument=?;""",(instruments,))
以下略
要は、whereの条件を引数で渡してあげたかったんだ。
なんとなく?を使えば良いと感じていたんだが、
cur.execute("""select * from rate where instrument=?;""",(instruments))
とすると、
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied.
こんなエラーを吐くんだわ。
で、
cur.execute("""select * from rate where instrument=?;""",(instruments,))
にするとしれっと動く。
たぶん引数が二つ以上あったら空の,は必要なくなるんだろうな。
なんだか、よく分からない仕様だ。
Pythonの仕様なのか、Sqlite3の仕様なのか……。
2017年1月22日日曜日
2016年12月30日金曜日
Pythonのリストが入れ子になっている場合、どうやって中身を取り出すか?
要はこういうこと。
例えば下記のようなシンプルなリストだったら、簡単に中身を取り出せる。
>>> data=[1,2,3,4,5]
>>> print(data[0])
1
>>> print(data[2])
3
じゃあ、こんな場合はどうする?
>>> data=[(1,2),(3,4),(5,6)]
JSON形式や、データベースからデータを引っ張ったとき、こういう形式になったいる場合が多いと思う。
実はかなり単純に値を取り出せる。
>>> data=[(1,2),(3,4),(5,6)]
>>> print(data[0][0])
1
>>> print(data[0][1])
2
>>> print(data[2][0])
5
>>> print(data[2][1])
なんか他の言語だとdata(0,1)とか考えちゃいそうなんだけど、上記の表現で取り出せるのな。
例えば下記のようなシンプルなリストだったら、簡単に中身を取り出せる。
>>> data=[1,2,3,4,5]
>>> print(data[0])
1
>>> print(data[2])
3
じゃあ、こんな場合はどうする?
>>> data=[(1,2),(3,4),(5,6)]
JSON形式や、データベースからデータを引っ張ったとき、こういう形式になったいる場合が多いと思う。
実はかなり単純に値を取り出せる。
>>> data=[(1,2),(3,4),(5,6)]
>>> print(data[0][0])
1
>>> print(data[0][1])
2
>>> print(data[2][0])
5
>>> print(data[2][1])
なんか他の言語だとdata(0,1)とか考えちゃいそうなんだけど、上記の表現で取り出せるのな。
登録:
投稿 (Atom)