ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2017年7月8日土曜日

Python から SQlite3でテーブル名を変数で作りたい時

タイトルがちょっとおかしい。
要は、テーブル名を固定ではなく、変数を使って作りたい場合。

d_name='usd_jpy'
sqlite_controller.cur.execute("""create table  %s(instrument,time,openask,closeask,highask,lowask,openbid,closebid,highbid,lowbid,complete);""" % d_name)  #テーブル作成

これでテーブル作成できましたね。

2017年1月22日日曜日

PythonからSqlite3で検索するときにWhereで変数を使いたい

これが、ちょっと想定外の記述方法で驚きましたわ。
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の仕様なのか……。

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)とか考えちゃいそうなんだけど、上記の表現で取り出せるのな。

2016年11月6日日曜日

Pythonプログラムで、決まったタイミングでなにかを実行させたい (crontab)

1分毎にスレッドを動かしたいと思ったとき、どうしたら良いのか途方に暮れた。
その土台に、crontabモジュールを使えば良いことが分かった。
crontabは、あるタイミングまでの残り時間を計算してくれる。

インストールは次のコマンドで。

$ pip install crontab


サンプルはこんな感じ。
==============================
from crontab import CronTab
import datetime

# 毎1分毎にクーロンを設定する。
entry = CronTab('* * * * *')

# 現在時刻を表示
print(datetime.datetime.now())

# 次のクーロンが動作するまでの残り時間を表示する。
print(entry.next())
==============================

entryでインスタンス化されたcrontabに対して、entry.next()で次回クローンが動作するまでの残り時間を取得することができる。

実行結果は次のような感じ。

2016-11-06 14:08:38.204069
21.79585

次回クローンが動作する2016-11-06 14:09:00まで残り21.79585秒であることが分かる。

2016年10月16日日曜日

日付をファイル名にしたい

Pythonで日付をファイル名にしたかったとき、こんな感じで実装できた。

==========
# SQLITE3のテストプログラム
import sqlite3
import datetime

# データベースファイルを開く
now=datetime.datetime.now()
filename=(now.strftime(“../hogehoge_%Y%m%d.db"))

conn=sqlite3.connect(filename)
cur=conn.cursor()
cur.execute("""create table rate(name,price);""")
==========

../ がついているのは、プログラムより一つ上の階層にファイルを作りたかったため。
これで、hogehoge_20161016.db というファイルが作られる。