kuroの覚え書き

96の個人的覚え書き

Programing

UPDATEの速度

SQLAlchemyでUPDATEを行うときの書式は for target in session.query(tableA).filter(tableA.gene.in_(session.query(tableB.gene))).all(): target.Gene_comments = target.Gene_comments + 'commentXXX' session.commit()まあこんな感じ。色々関係ない要素…

SQLite版とMySQL版の比較

Macローカルで初期画面をロードしてから、すぐにデータベースを開く操作をしてみるとSQLite版 127.0.0.1 - - [25/Dec/2017 19:24:29] "GET / HTTP/1.1" 200 - elapsed_time:0.0034799575805664062[sec] 127.0.0.1 - - [25/Dec/2017 19:24:36] "GET /exome/ H…

MySQLへの移植2

メインのデータベーステーブルexome_subが子テーブルになっていて、親テーブルexome_countからカラムを読み込んでいるときに、exome_countをDropしようとしたら Cannot delete or update a parent row: a foreign key constraint failsというエラーが出て消…

MySQLへの移植

データベースをSQLiteからMySQLに移植し始めた。出来上がったテーブルを検索したり、カラムにコメントを書き込むだけだと、SQLAlchemyのお陰で、ほとんど手を加えることなく移行ができた。しかし、データベース(テーブル)にデータを追加し、そこから情報を…

MySQLにTSVファイルをインポート

$ mysqlimport -u ユーザー名 --password=パスワード --local データベース名 テーブル名.txtであり、.my.cnfをホームディレクトリに [mysqlimport] user=ユーザー名 password=パスワード default-character-set=utf8 localこんな感じで作っておけば $ mysql…

リレーションでテーブル結合したときの検索

リレーションを張ってテーブルを結合したとき、普通にメインテーブルのカラムでfilterするときは特に変わりがないが、結合先のカラムでfilterするときはちょっと工夫がいる。 session = Session() q = session.query(Test) q = q.filter(Test.sample == "N00…

やっとリレーションの使い方がわかってきた

テーブル定義を class User_comments(Base): __tablename__ = 'user_comments' id = Column(Integer, primary_key=True, autoincrement=True) user1_comments = Column(String(255)) user2_comments = Column(String(255)) user3_comments = Column(String(2…

Pythonのスクリプトをデスクトップアプリ化する

自分で作成したアプリを自分の環境において使う分にはコマンド操作で全然問題ないが、人にわたして使ってもらうとなると モジュール等揃えてインストールしてもらって・・・となかなかハードルが高くなる。 なので簡単にデスクトップアプリ化できるならそれ…

PythonでCSVのリストに従ってGoogleで検索し、結果をスクレイピングする

詳細検索画面の初期設定で検索キーワードを入れて検索をする動作を自動化する。 https://www.google.co.jp/advanced_search?q= たとえば上の検索は https://www.google.co.jp/search?as_q=Python+Flask+SQLAlchemy+k-kuro&as_epq=&as_oq=&as_eq=&as_nlo=&as_…

csvファイルを読み込んでgoogleに検索を投げてトップヒット10件を集めてくる

import requests r = requests.get('http://www.google.co.jp/search?as_q=キーワード1+キーワード2・・・・') r.textとりあえずこれだけで検索の結果のhtmlファイルが得られる。なので import csv with open('some.csv', 'r') as f: reader = csv.reader(…

SelectMultipleFieldでなくBooleanFieldを使って複数選択

これまで、複数項目を選択してORで検索項目に使うとき func = SelectMultipleField('Function', choices=[('exonic', 'exonic'), ('splicing', 'splicing'),・・・・ if form.func.data: exome = exome.filter(Exome_sub.Func_wgEncodeGencodeCompV19.in_(fo…

検索条件等をアコーディオンで折りたたむ

http://kishiken.com/bootstrap/collapse.html インターフェイスをすっきりさせるべく、こちらの記事を参考に、項目の折りたたみを導入してみた。 1項目をボタンで開閉するパターンと複数項目を順に開閉するパターンを付けてみた。

実際一番時間がかかっているのは

elapsed_time:0.0021708011627197266[sec] elapsed_time:0.0022499561309814453[sec] elapsed_time:0.002342700958251953[sec] elapsed_time:0.0023527145385742188[sec] elapsed_time:0.002480745315551758[sec] elapsed_time:0.002567768096923828[sec] el…

NULLと空白文字

SQLiteでテーブルにinsertするとき、一部のカラムを指定しないままに行うと、指定されていないカラムにはNULLが入る。 これをSQLAlchemyでクエリを実行し、Python/FlaskでHTMLにレンダリングすると、NULLのカラムにはすべてNoneと表示される。 このままで別…

一体どこで時間がかかっているのか

データベースの検索速度がどうにも遅いわけだが、はたしてプログラムのどこで時間を食っているのか? import time .... @app.route('/exome_s/', methods=['GET', 'POST']) def exome_s_index(): start = time.time() .... .... elapsed_time = time.time() …

multiprocessor, multithread

https://qiita.com/petitviolet/items/64965e9ba236ebbdd37fhttps://qiita.com/yukiB/items/d6a70da802cb5731dc01

select count distinct

重複せずに行を数えるには SELECT COUNT(DICTINCT column) FROM tablehttp://d.hatena.ne.jp/nyoe3/20100313/1268468670

ユーザー個別データベースにもコメント欄を

やはりデータベース上に各自でコメントを入れておきたいという需要はあるだろうから、ユーザーテーブルにもコメント入力できるようにしよう。 データを書き換える可能性を考えて、書き換え時にユーザーごとのコメント保存テーブルにIDと紐付けて保存し、再構…

インプットファイルの整形からSQLiteへのインポートまでを1スクリプトで

import glob import csv import os def cat_input_files(lst): for f in lst: with open(f, 'r') as inp: reader = csv.reader(inp, delimiter='\t') next(reader) for row in reader: with open('./temp/temp.txt', 'a') as oup: writer = csv.writer(oup, …

多数のテキストファイルからヘッダ行を除いて1つのファイルにまとめる

#!/bin/sh #ls /target/multiannovar/filtered/files > list.txt #list.txtを引数として # $ sh ./input_files.sh list.txt mkdir -p ./temp filename=$1 for line in `cat ${filename}` do fname="${line##*/}" #ファイルからヘッダ行を除く sed -e '1d' $l…

ユーザーページのデータベーステーブル

さて、ユーザーごとにカスタマイズしたページを作るならば、テーブルの構成も自由に設定できるようになるのでないかということでmodels.pyのテーブル設定を考えてみた。実際にコピーできるカラムは元のテーブルにすでに載っているカラムからだけなわけだが、…

Raspberry pi でexome database

試しにRaspberry piで動くかやってみた。結果、まあ動きます。 ただし、ものすごく遅い。やっぱりメモリが足らんのだろうか。 サーバ上でローカルにアクセスしてて、より遅いかもしれないな。 別PCからアクセスしたらどうだろうか。多分変わらんだろうな。名…

速度向上の秘策

さて、いろいろ考えてみたものの、なかなか速度が改善しないSQLデータベース検索だが、そもそも、レコード数を前もって間引いとけばいいんじゃない?というアイデアが出た。 つまり、現在の検索の順序として Variant countでカットオフ Gene countを計算し、…

ToDo

in memoryデータベース multiprocessing データインポート protein データベース

ディスク保存のデータベースからテーブルをメモリーデータベースに読み込んで利用するには

いろいろやってみているんだけど、なかなか成功しない。 https://stackoverflow.com/questions/4019081/how-to-copy-a-sqlite-table-from-a-disk-database-to-a-memory-database-in-python https://stackoverflow.com/questions/3850022/how-to-load-existin…

Pythonを使ってSQLiteにTSVファイルをimport

sqlite3からは > .separator "\t" > .import hoge.txt hogeとすればhoge.txtというTSVファイルからデータをhogeテーブルにインポートできる。 これをshell scriptからやるには $ sqlite3 -separator $'\t' ./data.db ".import ./hoge.txt hoge"これでいい。 …

version1.0に向けての作業ToDo 2

BAMファイル所在リンクはすべて1箇所にまとめ直し、データベースも書き換えた。リンクファイルの名前付けに統一ルールを設けたので、データベースは機械的に書き換えることが可能と成った。TEXT→Float,Integerへの書き換え完了。やはり速度が上がるというこ…

version1.0に向けての作業ToDo

BAMファイルの所在がバラバラなので、1箇所にきちんとリンクを貼る。 そうすればデータベースのカラムの書式が単純化され、メンテナンスが容易になる。 Textを可能な限りFloat、Integerに書き換える。 βテストは良好。それに合わせてスクリプトの修正 メンテ…

速度アップにはマシンパワー増強とインメモリデータベースの利用で

現状フルサイズ350カラム、実際に運用時30カラム程度で、165万件くらいのデータベースなんだが、ほぼすべてのカラムがTextとして構築されているためにMySQLに乗り切らないことは前に書いた。で、どうしてTextなんだということだが、要するにデータ解析の過程…

リレーション参考

https://www.pythonsheets.com/notes/python-sqlalchemy.htmlhttps://www.codementor.io/sheena/understanding-sqlalchemy-cheat-sheet-du107lawl