delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

2020-06-01から1ヶ月間の記事一覧

Django+factory-boyでテストデータを作成する際に「Duplicate entry」を回避する方法

概要 Django+factory-boyでテストデータを作成する際に、結合先のテーブルに主キーが同一のレコードを複数INSERTしようとして「Duplicate entry」が発生してしまう事象を回避する方法について書く。(詳細は後述) 前提 Django: 3.0.7 factory-boy: 2.12.0 結…

Djangoで「makemigrations」を実行しても「No changes detected」が出るようになってしまった

概要 Djangoで、一度「migrations」ディレクトリを削除した後、もう一度 $ python manage.py makemigrations を実行した。 「migrations」とその配下のファイルが再び作成されることを期待していたが、実際には「No changes detected」と表示されるようにな…

Djangoで全てのマイグレーションをロールバックする

概要 Djangoで全てのマイグレーションを全てロールバックして、DBを初期状態にしたいと思ったが、調べたところ全てロールバックするコマンドは存在しないようなので、xargsコマンドと合わせて実現した。 方法 以下のコマンドを実行する。 $ python manage.py…

Djangoでtest実行時に「ImportError: 'tests' module incorrectly imported from...」が発生

概要 Djangoで以下のコマンドでユニットテストを実行しようとした。 $ python manage.py test すると、「ImportError: 'tests' module incorrectly imported from...」というエラーが発生した。 原因 以下のように、「tests.py」と「tests」ディレクトリが両…

Django REST frameworkでPOSTかつユーザー認証ありのAPIにcurlでリクエストする

概要 Django REST frameworkでAPIを開発している際に、POSTのAPIなのでコマンドラインからcurlでデバッグしようとしたところ、掲題の件でハマったのでメモ。以下の認証を突破する必要がある。 ユーザー認証 CSRF認証 前提 django-debug-toolbarがインストー…

Djangoでマイグレーションを個別に適用する方法

概要 Djangoでマイグレーションを一部だけ適用したいケースがあったので、方法をメモ 手順 マイグレーションの一覧を表示する。 対象のマイグレーションのアプリ名とIDを確認する必要があるので、以下のコマンドを実行して確認する。 $ python manage.py sho…

DjangoでAmazon SESを使ってメール送信する。(2020/6/9時点)

概要 DjangoでAmazon SESを使ってメール送信する方法を検証したので、手順を残しておく。 ※ あくまで検証用の手順です。I AMの設定やメール送信時のエラーハンドリングは考慮していません。 前提 「django-ses」というパッケージを使用する。 github.com 環…

MySQLのカラムの文字列長について(TEXT型、LONGTEXT型)

概要 クローラーで取得したHTMLコンテンツをMySQLに保存する際に、深く考えずにカラムタイプをTEXT型にしていたら、「Data too long for column」が発生した。 環境 MySQL 5.7.30 原因 MySQLのTEXT型の最大長は65,535(約6万)文字とのこと。また、以下のよう…

「sqlalchemy.exc.InvalidRequestError: Table 'table_name' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.」が発生

概要 SQLAlchemyでMySQLにデータをInsertしようとしたところ、以下のエラーが発生した。 エラーの原因は調査できていないが、とりあえず解消方法は見つかったので備忘録としてメモしておく。 sqlalchemy.exc.InvalidRequestError: Table 'table_name' is alr…

Pythonでファイル名にタイムスタンプをつける

以下、f-stringを使うと1行できれいに書ける。(Ver3.6以降) from datetime import datetime file_name = f"result.{datetime.now():%Y%m%d%H%M%S}.csv" print(file_name) ・実行結果 result.20200602183258.csv

Pythonのモジュールのimportの仕組みについて勉強する

Pythonのモジュールのimportの仕組みについて、ちゃんと理解していなかったので勉強した。 1.Pythonがモジュールを検索するパス Pythonはsys.pathというリスト型の変数に含まれるパスを起点にモジュールを検索する。詳細は以下の公式ドキュメントを参照docs.…