2023-10-01から1ヶ月間の記事一覧

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る

pytest-mock だけで頑張る方法今回目的の対象の検索クエリ'name'列を指定してSQLの結果から1行目の結果の 'color'列の値を取得するクエリ のメソッドがある。 class Sample: def queryColor(self, name:str)->str: sfactory = sessionmaker(autocommit=Fals…

PostgreSQL JSON 型の演算子

SQL

マニュアル参照:9.15. JSON関数と演算子JSON の値、数値として SELECT されるか? '{ "a": [1,2,3] }'::json->'a'->1 この場合、2 が数値として取り出せるか?というとそうではないらしい-> この演算子のまま、 以下のように CAST してはダメだ。 CAST('{ "…

SQLAlchemy 直接SQL、execute, from_statement サンプル

サンプル from sqlalchemy import create_engine, text from sqlalchemy.orm import Session, registry import sqlalchemy as db mapper_reg = registry() Base = mapper_reg.generate_base() class Sample(Base): __tablename__ = 'samples' id = db.Column…

SQLAlchemy query() の filter メモ

代表的な filter の書き方のサンプル・メモ (try~catch は省略) from sqlalchemy import create_engine, text from sqlalchemy.orm import Session, registry import sqlalchemy as db mapper_reg = registry() Base = mapper_reg.generate_base() class …

SQLAlchemy SELECT COUNT(T) の結果は scalar() で求める

with engine.begin() as connection: sql = 'SELECT COUNT(*) FROM samples' rows = connection.execute(text(sql)) count = list(rows)[0][0] こんな方法ではなく、scalar() を使う 例) from sqlalchemy import create_engine, text from sqlalchemy.orm i…

SQLAlchemy Session try~catch

簡単なサンプルで、、、 まずは、Session使用メソッドの呼び出し側で捕捉 from sqlalchemy import create_engine, text from sqlalchemy.orm import Session # 接続情報、username, password, host, port, dbname は設定済 engine = create_engine(f'postgre…

SQLAlchemy コネクション、セッション

以前、あまりにも内容が薄い安易なものをここに書いたので、もう少しまともなメモを 書こうと思った。create_engine from sqlalchemy import create_engine, text host = 'localhost' port = 5432 username = 'myuser' password = 'p1234' dbname = 'sampled…

UUID のタイプハンドラ

UUID型のタイプハンドラの必要性をあまり感じなかったので、今まで書いてなかった。 PostgreSQL なら、gen_random_uuid() 関数で生成してくれるし SELECT クエリ結果も、mybatis は、String に自動マッピングで抽出できるとなると、 あまり、java.util.UUID …

PostgreSQL uuid → string

SQL

SELECT 句等での uuid の 文字列への変換、 ::text もしくは、::varchar を付ける。GROUP BY なんかで集計した場合の例、 string_agg(id::text , ',' order by create_time) AS idjoin または、 string_agg(id::varchar , ',' order by create_time) AS idjo…

PostgreSQL の RETURNING の特殊な使い方

SQL

過去、以下2つを投稿しましたが、 PostgreSQL で mySQL の last_insert_id() 相当をmybatis で実装したい - Oboe吹きプログラマの黙示録PostgresSQL アップサートのインクリメント - Oboe吹きプログラマの黙示録そもそも、PostgreSQL の RETURNING は、INSE…

2つのリストを処理

1つの方法→ zip()サンプル:split で生成した2つのリスト a = 'a,b,c,d' b = '1,2,3,4' for x, y in zip(a.split(','), b.split(',')): print('%s - %s' % (x, y)) print 結果 a - 1 b - 2 c - 3 d - 4tuple のリストにする。 c = [(x, y) for x, y in zip…

PostgreSQL での GROUP_CONCAT

SQL

MySQL の GROUP_CONCAT と同様のことをやる。GROUP BY を指定したSELECT で、STRING_AGG を使う。書式は、 STRING_AGG ( expression, separator [order_by_clause] )order by で指定する列は、他の列でもいい

PostgresSQL アップサートのインクリメント

SQL

UPDATE 時のインクリメントがうまくいくからといって、 アップサートでのインクリメントが同じ構文では効かないのが PostgresSQLこんなテーブルがあった時、 CREATE TABLE ITEMS ( ID VARCHAR(6), NAME VARCHAR(20), U_COUNT INTEGER, PRIMARY KEY (id) ) こ…