kuroの覚え書き

96の個人的覚え書き

SQLAlchemy

in_()に入るlistのサイズは最大で999らしい

あるqueryを組み立てて、結果出てくるものからlistを作って、そのlistに含まれるものをin_()を使って別のqueryの中でfilterしたいと思った。 q = session.query(Rna_snp) snp = q.distinct(Rna_snp.snp_hash).group_by(Rna_snp.snp_hash)snp.all() snp_list …

SQLからmatplotlibでグラフを作ってFlaskで表示

@app.route('/') def index(): import matplotlib.pyplot from matplotlib.backends.backend_agg import FigureCanvasAgg import io import random session = Session() q = session.query(Diff).filter(Diff.id <6).filter(Diff.id > 1).all() fig, ax = ma…

sqlのDBからグラフを作って表示

集計してテーブルを作って、個々のデータから生データであるBAMを参照することはできるようになったが、テーブルを眺めていてもそれ以上進まないので、テーブルからグラフを描かせていきたい。https://qiita.com/5t111111/items/3d9efdbcc630daf0e48f この辺…

大きいカラムを遅延ロードするとパフォーマンスが上がるかもしれない

http://nauthiz.hatenablog.com/entry/20101024/1287938261これは有用かもしれない。

同じ動作にならないもの

q = select(["exome_temp.SampleName_phenotype, exome_temp.variant_id, exome_temp.variant_id, exome_temp.variant_id"], from_obj=['exome_temp']) ins = insert(Exome_sub2).from_select((Exome_sub2.SampleName_phenotype, Exome_sub2.variant_id, Exo…

sqlalchemy or sqlalchemy.sql or sqlalchemy.sql.expression

黙々とデバッグ&コードの整理を行っているわけだが・・・コードをツギハギで書いていると from sqlalchemy import func from sqlalchemy.sql import func from sqlalchemy.sql.expression import func と同じfuncを3箇所からimportしていたりする。これら…

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のお陰で、ほとんど手を加えることなく移行ができた。しかし、データベース(テーブル)にデータを追加し、そこから情報を…

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

リレーションを張ってテーブルを結合したとき、普通にメインテーブルのカラムで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…

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

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…

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

データベースの検索速度がどうにも遅いわけだが、はたしてプログラムのどこで時間を食っているのか? 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

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

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

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

いろいろやってみているんだけど、なかなか成功しない。 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…

リレーション参考

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

SQLiteのINSERTをSQLAlchemyで書くと

#sql>INSERT INTO Exome_sub(SampleName_phenotype, avinput_ref, avinput_alt, variant_id) SELECT SampleName_phenotype, avinput_ref, avinput_alt,variant_id FROM exome;こんな感じにテーブルexomeからテーブルexome_subにSampleName_phenotype, ref, a…

Flaskアプリでデータベースのテーブルを消したり作ったり

テーブルのclassを設計して起動時にテーブルを作成する事はできていたが、内部で操作をしてすでにあるテーブルを消して作り直すと言うのはやってなかった。 https://stackoverflow.com/questions/35918605/how-to-delete-a-table-in-sqlalchemy 結論としては…

複数ワードあったらor検索をかける

現在の検索式では exome = exome.filter(Exome.SampleName_phenotype.like(form.name.data))こういうふうに検索ワード1個の入力に対して処理をしているが、2個だったら exome = exome.filter(Exome.SampleName_phenotype.like(form.name1.data) and Exome.Sa…

wtfの検索値を記憶する

SelectFieldの設定値を記憶させて次のセッションでそれを入れさせようとあれこれ考えたが、なかなかうまくいかない。 そこで違ったアプローチでの実現を考える。 要するに前回の検索値のセットをまとめて記憶しておいて、画面上の検索入力をすっ飛ばして記憶…

複数の検索ワードを選択肢から選んでOR検索

まず選択肢の設置 from wtforms import SelectMultipleField ex_func = SelectMultipleField('Exome function',choices=[('stopgain', 'stopgain'), (..........という感じにSelectMultipleFieldを使う。検索式の方はor_でなんとかなるかと思ったが実際はど…

SQL表現言語

結局ナマのSQL文に近いSQL表現言語を使わないと、ややこしい検索はできない気がしてきた。 from sqlalchemy import select ... conn = engine.connect() s = select([Test]) sample = conn.execute(s) これが sample = session.query(Test)と等価であること…

group_byでsumしてquery

やりたいこと テーブルTestで、カラムz_idの数値をカラムnameとgeneが同じサンプルで合計してtotal_pointsとして各サンプルに付与し、total_pointsが2以上になるサンプルをqueryしたい 作ったコード total_points = func.sum(Test.z_id).label('total_points…

検索式のコードを単純化

デフォルトにあいまい検索を取り入れることで複雑なif分岐をできるだけなくし、コードをすっきりさせる。コードの可読性は若干落ちるが、複雑な検索式の組み合わせをifを多用して作ると長大でredundantなコードになってしまい、混乱の元になる。 if form.nam…

SQLalchemyの検索についてテストする簡易なページを作成

detest.py from flask import Flask, render_template from sqlalchemy import create_engine, Column, Integer, String, func from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy.sql.expr…

SQLAlchemyを組み込む step by step

やることは データベースへの接続 テーブルの定義 マッピング先のPythonクラスを定義する セッションの作成 という感じ。まずはどのサイトでも書かれているimport しかしサイトごとに書き方が色々で、最もざっくりしたものだと from sqlalchemy import * fro…

SQLAlchemy関連参照リンク一覧

SQLAlchemy 0.6.5 ドキュメント (和訳) http://omake.accense.com/static/doc-ja/sqlalchemy/index.html Flask-SQLAlchemy is a SQLAlchemy extension for Flask. http://flask-sqlalchemy.pocoo.org/2.1/ SQLAlchemyについて http://study-flask.readthedoc…

phpのSQLクエリをSQLalchemyに移植

$query1 = "SELECT * FROM `$table_name1` left join ( select sum(case when `V_count` <= $value1 and `A`='x' then 1 when `V_count` <= $value1 and `A`='y' then 2 else 0 end) as count,`N`,`M` from `$table_name1` group by `N`, `M`) as tbls using…