Python
SELECT結果⇒クラス定義した任意Objectのリストとして受け取る。query() でSELECT結果にあてはまるObjectクラスを指定、from_statement で、 SQLステートメントを渡してall() で結果を受け取る。 session.query(Objectクラス).from_statement(text(完成したSQ…
Java では、テーブルカラム名が snake case に対して マッピングする Java Object を camel case とする約束に 拘ることが多いが、Python で拘っているのを見かけない。 それでも、テーブルカラム:snake case ・・・ Pythonの オブジェクト:camel case に …
curly brackets Number 中括弧 { } で囲んだ番号を 任意の文字列で置換する処理を Java では、 oboe2uran.hatenablog.com を書いた。同様の処理を Python で書いてみた。 正規表現のメソッド re.sub(pattern: str, repl: str, string: str) の repl で lambd…
Python で、snake case 文字列と camel case 文字列の相互変換 import re # snake case -> camel case snakestr = 'a_sde_k_abc_def' result = re.sub('_(.)', lambda x:x.group(1).upper(),snakestr) print(f'{snakestr} -> {result}') # camel case -> sna…
Pythonクラスを定義作成する時に要素を __init__() で初期化定義の記述は、なかなか面倒くさい。 標準のライブラリ dataclasses からデコレータ dataclassを使用すれば、 __init__の省略のみならず、__repr__ の実装で要素の値を出力してくれて 開発・デバッ…
oboe2uran.hatenablog.comに続いて、では、Python で書いてみる。0.003017 の境界値を求める。 from decimal import Decimal, ROUND_UP v = 0.003017 res = (Decimal('0.5')/Decimal(str(v))).quantize(1, ROUND_UP) print(f'{type(res)} ⇒ {res}') # <class 'decimal.Decimal'> ⇒ 166</class>…
SQLAlchemy クエリ実行結果のObjectを辞書(dict) に変換 - Oboe吹きプログラマの黙示録 に続けて、今度は JSON にする変換する方法、 dict を求めてそのまま、json_dumps の実行では、DBの型、DATETIME や TIMESTAMP に 対応できなくなるので、 JSONシリアラ…
Runtime Inspection API — SQLAlchemy 2.0 Documentation にメソッドを用意する 辞書(dict)を作成する方法 from sqlalchemy import inspect def object_to_dict(obj): return { c.key: getattr(obj, c.key) for c in inspect(obj).mapper.column_attrs } htt…
sqlalchemy.engine.cursor.CursorResult から、rowcount を参照するdatabase.py : DB接続セッションを提供する from sqlalchemy import create_engine from sqlalchemy.orm import Session from contextlib import contextmanager from sqlalchemy.orm impor…
l1 = [1, 2, 4, 5, 7, 9] l2 = [2, 3, 4, 6, 8] list ⇒ set(集合)に変換して積を求めて list に戻す s1 = set(l1) s2 = set(l2) s3 = s1 & s2 l3 = list(s3) l3 は、 [2, 4] 集合演算子 & で計算する代わりの積のメソッド(intersection)、 s3 = s1.intersect…
範囲の幅から計算した範囲の数ではなく最大値で制限した範囲の処理をする課題が目的、 範囲の数を指定できる場合と比べていく。Java の場合、範囲幅=100 で、5個の範囲の処理、この 5個と指定できる場合は次のように簡単に書ける。 すなわち、IntStream.rang…
リストの最後、の見慣れない求め方 *_, last = [1, 3, 2, 6, 25, 2] print(last) functools の reduce でリストから最大値を求める res = functools.reduce(lambda a, b: a if a > b else b, [1, 3, 2, 6, 25, 2])
対象リスト l1 = [3, 1, 9, 13, 10, 8, 17, 2] 10 より大きいリストを求める。内包表記を使う l2 = [e for e in l1 if e > 10] filter を使う l2 = list(filter(lambda x:x > 10, l1)) itertools.filterfalse を使う import itertools l1 = [3, 1, 9, 13, 10…
順列:Permutation import itertools po = itertools.permutations(['A', 'B', 'C'], 2) print(type(po)) plist = list(po) print(plist) for v in itertools.permutations(['A', 'B', 'C'], 2): print(v) <class 'itertools.permutations'> [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C')</class>…
簡単なデカルト積を作るサンプル itertools をインポート import itertools product( 要素リスト, ,,, ) で生成する。 作成されるのは、イテラブル・オブジェクト list1 = ['A', 'B'] list2 = [1, 2, 3] products = itertools.product(list1, list2) print(p…
DataFrame [] スライスで取得したい行を取得 取得した DataFrame の values で numpy.ndarray を取得して、 (values取得で多次元配列 ndarray は、2次元配列だから[0]で1行分を取得) tolist() でリストに変換例)注意:CSV先頭行はヘッダ行で、データ行…
任意の列項目で重複があるCSV 先日のサンプル ⇒ Pandas を使ってcsv 任意の列で重複するキーの組み合わせを求める。 - Oboe吹きプログラマの黙示録 にあるようなCSVから、 重複行を取り除いたCSVを生成する。DataFrame に対して drop_duplicates(subset=[ 重…
先日書いたのは、CSVでどのような重複があるかを調査するものだった。 Pandas を使ってcsv 任意の列で重複するキーの組み合わせを求める。 - Oboe吹きプログラマの黙示録重複有無のだけを判定する方法をまとめた。先日の Pandas を使ってcsv 任意の列で重複…
サンプルのCSV 品名 産地 単価 数量 キャベツ 群馬県 219 120 コシヒカリ 新潟県 3350 20 小松菜 茨城県 198 40 キャベツ 群馬県 209 80 りんご 長野県 224 100 小松菜 茨城県 188 90 キャベツ 神奈川県 210 70 キャベツ 群馬県 224 100 '品名'と'産地'が重…
__iter__() イテレータの実装例日付の開始と終了から1日ずつの datetime.date を返すイテレータ class Datedayrange: import datetime def __init__(self, start_date: datetime.date, end_date: datetime.date): if start_date > end_date: raise ValueErr…
\uXXXX という書式、Unicodeエスケープされた文字とASCII文字だけの文字列 を例にする。 \u3042\u3044\u3046\u3048\u304a_%abc123_\uff76\uff77\uff78\uff79\uff7a Python では、\uXXXX 書式文字列は、\をエスケープして文字列として持つことになる。 ustr =…
datetime.timezone.utc でUTCタイムゾーン時刻を取得します datetime.timedelta で日本のタイムゾーン時刻に変換 from datetime import datetime, timezone, timedelta # UTCタイムゾーンの現在時刻を取得 dt = datetime.now(timezone.utc) # 日本標準時(JS…
こんな方法あるんですね。 zenn.dev でも、廃止なんだ、、、 代用はあるみたい blog.devplatform.techmatrix.jp
Python の基礎のおさらいです。map関数 map object というイテレータを生成します。 書式:map(callable, iterable)map(lambda 引数: 戻り値, iterable(listやdictなど)) 例) m = map(lambda x: x*2, [1, 2, 3]) print(type(m)) <class 'map'>つまり、 for i in map(lamb</class>…
Oralce用、PostgreSQL用を書いたので、MySQL用を用意しました。mkInsertMySQL.py # -*- coding: utf-8 -*- # TRUNCATE して INSERT する SQLも生成 import datetime import openpyxl import sys import os # MySQL用 INSERT 作成 class MakeInsertSQL(object…
Oralce 用を書いたので、PostgreSQL用を用意しました。mkInsertPostgreSQL.py # -*- coding: utf-8 -*- # TRUNCATE して INSERT する SQLも生成 import datetime import openpyxl import sys import os # PostgreSQL用 INSERT 作成 class MakeInsertSQL(obje…
oboe2uran.hatenablog.comこれを考慮して、去年作成したOracle用のINSERT-SQL 作成ツールを書き直す。Excel の日付書式、年月日のみは、DATE型、時分秒が付く時は TIMESTAMP に 対応するように作り直した。 mkInsertSQLforOracle3.py # -*- coding: utf-8 -*…
Openpyxl で、Excel ファイルを読み込んだ時、 日付時刻のセルの値は、Excel の書式上(Excelでの表示上)で、 日付のみであろうと、時分秒を表示した日付時刻であろうと、 つまり、yyyy-mm-dd のExcel表示であろうと、yyyy-mm-dd HH:mm;ss の表示であろうと…
(1)動的にダウンロードするコンテンツを作成してダウンロードさせる場合例)CSVを生成→ダウンロード from fastapi import FastAPI, Response app = FastAPI() @app.get("/download") def csvget(): content = '"あ","い","う"\n"1","2","3"' filename …
正規表現だけでメールアドレスチェックをして良しとするのは あまり良くない。 メールアドレスが指すドメインだけでも、DNSサーバに問い合わせたい。 Java の場合、 以下を参考に、DNS lookUp で検証する。 https://docs.oracle.com/javase/jp/6/technotes/g…