019|OnPostgreSQL only,位置パラメータ(*フィールド)-Djangoを渡すPostgresqlを使用する



なぜ突然Postgresに変更したのですか?


H&Mクローン符号化を行った際,フロントと通信して商品のフィルタ送信を確認する過程で,修正が必要な箇所を発見した.
私たちが作った製品の型番は商品番号が異なり、商品名が同じ場合があります.なぜなら、H&Mサイトで製品をクリックすると、製品番号が教えてくれるからです.


同じ製品ですが、色の違う製品で、品番も違います.
最初は単純なフィルタ送信で、コードは以下の通りです.

Query Stringに入るフィルタ条件がFILTER_PREFIXに存在する場合、製品オブジェクトは条件を満たす商品のみを返す.
この場合、フィルタリングは効果的ですが、フロントと通信して観察すると、フィルタリングした同名商品の色が異なり、idが異なるとそのまま横に置かれます.
もちろん、クリックして詳細ページを見ると、他の製品に違いありませんが、少しそう見えます.
実は造形から問題があったのは正しいです.関連するプロダクトテーブルを作成すれば、この問題を解決することができます.私たちは2日以内にプロジェクトを完了しなければなりません.テーブルに触れた場合、他の作成したビュー、csvファイル、db uploaderにも触れなければなりません.py.. かかわった問題が多すぎる.
元のraw SQLはcolumn名でdistictできます.だから私は知っています.distict(*field)を使用しました...エラーを返します.間違った写真はないので添付できませんが、Googleで検索したら以下の内容が見つかりました.
ここです。で確認すると、おおよそ네가 구현하고 싶은 기능은 Postgresql 에서만 가능해と書いてあります.

指導者にSOSを要求するように走った.答えは二つしかない.
  • MySQL dbの機能を元のSQLで実現
  • Postgresqlに変更し、独自の機能
  • を使用します.
    raw sqlの書き方を知らないわけではありませんが、後者よりも時間がかかる可能性があります.
    前にpostgresqlを使ったことがありますが、mysqlとあまり変わらないと思い2番を選びました.

    djangoでpostgresを使用する


    次のコマンドを使用してPostgresqlを設定します.
    brew install postgrsql
    brew services start postgresql

    インストールに成功した場合は、上記のコマンドを使用してバージョン検証を行います.
    psql postgres
    上記のコマンドを使用してpostgresqlに接続した後、次のコマンドを使用して事前定義された権限を検証します.
    postgres=# \du

    postgresユーザーのパスワードは、次のコマンドで設定できます.
    postgres=# \password postgres
    次のコマンドを使用してデータベースを作成します.
    CREATE DATABASE "db-name"
      WITH OWNER "db-user"
      ENCODING 'UTF8'
      LC_COLLATE = 'en_US.UTF-8'
      LC_CTYPE = 'en_US.UTF-8';
    次のコマンドで生成したdbに接続できます.
     postgres=# \connect [db-name]
    mysettings.pyをPostgresデータベースを使用するように変更します.
    DATABASES = {
        'default' : {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'db-name',
            'USER': 'db-user',
            'PASSWORD': 'PASSWORD',
            'HOST': '127.0.0.1',
            'PORT': '5432',
        }
    }
    migrateと作成されたdb_uploader.pyは正常に動作しています.

    修正されたフィルタコード



    元のコードよりも変更された事項は次のとおりです.
  • offset&limitのpagation
  • を使用
  • distinctを使用して重複商品
  • を除去する.
  • フィルタリング時にsize idではなくsize nameを使用