[[FrontPage/Python]] アプリのデータ永続化のためにSQLite3を使う ** 超分かりやすい python + SQLite [#pcf6c22b] http://www.gesource.jp/programming/python/code/0013.html ** ndarrayの格納方法 [#ca61ac23] データ解析ではndarrayで多次元配列を操作するのがほとんど.毎回呼び出していると時間がかかるのでDBに突っ込みたい. - 方法1 -- http://stackoverflow.com/questions/18621513/python-insert-numpy-array-into-sqlite3-database ** pandasでSQLiteを使う [#ff88333e] http://www.mwsoft.jp/programming/numpy/rdb_to_pandas.html ** pandasでRDBの読み書きをする [#p2a1c03e] 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 [#l839a0e1] 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に格納 [#b7748b9d] 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()