FrontPage/Python

アプリのデータ永続化のためにSQLite3を使う

ndarrayの格納方法

データ解析ではndarrayで多次元配列を操作するのがほとんど.毎回呼び出していると時間がかかるのでDBに突っ込みたい.

pandasでSQLiteを使う

http://www.mwsoft.jp/programming/numpy/rdb_to_pandas.html

pandasでRDBの読み書きをする

http://www.mwsoft.jp/programming/numpy/rdb_to_pandas.html

def create_db():
   # PandasのDataFrameを生成
   df = loadDataFrame(WAVDIR_ABSPATH)

   # PandasのDataFrameをSQLiteに保存
   with sqlite3.connect('ExpData2.db') as conn:
       # conn.execute("DROP TABLE IF EXISTS tbl_golf")
       psql.to_sql(df, 'tbl_golf', con=conn, index=True, if_exists='replace')

   cur = conn.execute('SELECT * FROM tbl_golf')
   print cur.fetchall()
def load_db():
   # dbからデータを呼び出しpandasへ保存
   with sqlite3.connect('ExpData2.db') as conn:
       sql = "SELECT * FROM tbl_golf"
       df = psql.read_sql(sql,conn)
   print df

Pickle

http://blog.amedama.jp/entry/2015/12/05/132520

# -*- coding: utf-8 -*-
import pickle


class Sample(object):

   def __init__(self, filename):
       """非 Pickle 化されるときは呼ばれない"""

       # 文字列は Pickle 化できる
       self.filename = filename

       # ファイルオブジェクトは Pickle 化できない
       self.file = open(filename, mode='rb')

   def __getstate__(self):
       """Pickle 化されるとき呼ばれる"""

       # オブジェクトの持つ属性をコピーする
       state = self.__dict__.copy()

       # Pickle 化できない属性を除去する
       del state['file']

       # Pickle 化する属性を返す
       return state

   def __setstate__(self, state):
       """非 Pickle 化されるとき呼ばれる"""

       # オブジェクトの持つ属性を復元する
       self.__dict__.update(state)

       # Pickle 化できなかった属性を作りなおす
       self.file = open(self.filename, mode='rb')


def main():
   obj = Sample('/dev/null')
   binary = pickle.dumps(obj)
   restored_obj = pickle.loads(binary)
   print(restored_obj.filename)
   print(restored_obj.file)


if __name__ == '__main__':
   main()

Pickle + SQLite 任意のPythonオブジェクトをSQLite Blobに格納

import sqlite3
import pickle
class Abcdefg(object):
   def __init__(self):
       self.a=10
   def play(self):
       print self.a
a = Abcdefg()
pdata = pickle.dumps(a, protocol=1)
sqlite3.register_converter("pickle", pickle.loads)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()
cur.execute("create table test (arr pickle)")
cur.execute("insert into test (arr) values (?)", (sqlite3.Binary(pdata), ))
cur.execute("select arr from test")
data = cur.fetchone()[0]
data.play()
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS