問題タブ [ponyorm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1629 参照

python - Pony ORM で postgres データベースを作成/接続する方法は?

Postgres データベースを作成して、現在行っている Pony ORM Web アプリケーションに接続しようとしています。最初は Pony ORM で sqlite データベースを使用していましたが、すべて正常に動作しましたが、Heroku に配置したいので postgres に切り替える必要があります。グラフィック postgres ツールを使用して、「notice_db」というデータベースと、notice という名前の postgres ユーザーを作成しました。データベースをポニーにバインドするための私のコードは次のとおりです。

ユーザーを見つけてlocalhostに接続しますが、データベースは接続または作成されないため、属性「username」を持つUserクラスのデータベースエンティティを作成するなどのPony ORM関数を使用しようとすると、次のエラーが発生します:「ProgrammingError : 列 "username" が存在しません LINE 1: select * from User where username = 'user1'".

Pony は postgres データベースに接続したり作成したりしません。postgres データベースを Pony ORM アプリケーションに接続するにはどうすればよいのでしょうか?

0 投票する
1 に答える
1481 参照

python - PonyORM、SQLite のパフォーマンス

Raspberry PI 3 で Python 3.5 を使用する SQLite データベースの ORM として PonyORM を使用しています (想像できる最速のデバイスではありませんが、それほど悪くはないはずです)。

挿入などの一部の操作は、非常に遅いようです。3 つの短い文字列を含むエンティティの 1 回の挿入には、4 ~ 10 秒かかる場合があります。

ここに私のdatamodel.pyファイルがあります:

また、非常に単純なパフォーマンス テストも作成しました。

そのサンプル結果:

SQL クエリ文字列はすぐに出力されるので、ここでは翻訳は問題ではないと思いますが、ご覧のとおり、操作全体に数秒かかります。

その理由は何ですか?この途方もなく長い時間を改善する方法はありますか?

0 投票する
1 に答える
68 参照

ponyorm - 他のレコード リストにないレコードの選択

シナリオ

プレイヤーはイベントに参加します。イベントに参加するかどうかの情報を提供する必要があります。

解決すべき問題

特定のイベントに参加する予定がある場合、情報を提供していないプレーヤーを選択したい。

あなたの目標

使用されているテクノロジーの初心者として、以下で私が提案するソリューションの改善のための検証と推奨事項をいただければ幸いです。

解決

テクノロジー: python、postgreSQL、および Pony ORM

Pony ORM のエンティティ モデル:

考え:

  1. イベントに参加した場合に情報を提供したプレイヤーのリストを取得する
  2. 1で作成したリストにない選手のリストを取得。

アイデアの現在の実装:

0 投票する
1 に答える
1072 参照

python - Pony ORM - 特定の順序で注文する

Pony ORM クエリを実行し、モデルに存在する 3 つの属性でクエリをソートしようとしています。最初に曲の種類 ( にリストされている 5 つの値のいずれかssf_type_order_map)、次に期間 (int)、および uuid (文字列) によって分類されます。

曲の種類については、フル、フル (インストゥルメンタル)、ショート、ループ、ステムの順に曲を並べ替えたいと思います。

次の呼び出しを使用してソートしようとする.order_by()と、エラーは返されませんが、前述の順序で必要なため、タイプによってソートされません (ただし、期間と UUID のソートは正常に機能します)。

これは私が理想的なクエリだと思うもので、文字列型をそれらの順序をランク付けするマップにマップします。

しかし、これを実行すると、「Expression ssf_type_order_maphas unsupported type 'dict'.

ここの order_by に関する Pony ORM ドキュメントは、このコンテキストでラムダを使用することについて非常にあいまいです。

更新 - 9 月 7 日

また、次のようにモデルに次のゲッター プロパティを追加しようとしました。

次に、次のようにクエリを並べ替えます。

しかし、基本的にモデルにこのプロパティがないというエラーが表示されます。Django の ORM に関する同様の問題に基づく私の推測は、データベース モデルに存在する属性にしかアクセスできないということです。

ポニーもそうだとしたら、自分がやりたいことをどうやったら実現できるのでしょうか?

0 投票する
2 に答える
2424 参照

python - PonyORM: どの項目が既に存在するかを知らずに新しい項目を pony データベースに追加する最も効率的な方法は何ですか?

これが明らかな質問である場合は申し訳ありませんが、ポニーとデータベース全般に不慣れで、この質問に答えるドキュメントの適切な部分が見つかりませんでした。

企業とその企業がオフィスを構える場所のデータベースを作成しようとしています。各会社は複数の場所にあり、各場所は複数の会社のホストになる可能性があるため、これは多対多の関係です。私は自分のエンティティを次のように定義しています:

理想的には、会社をデータベースに追加する関数を作成し、その会社が存在する場所のリストを追加し、まだ存在しない場合は新しい場所のインスタンスを確実に追加できるようにしたいと考えています。そのための 2 つの方法をすぐに思いつくことができます。

最初に、場所が存在する場合でもその場所を入力して、例外を処理しようとします。

2 つ目は、データベースにクエリを実行し、場所がまだ存在するかどうかを確認することです。

これら2つのうち、よりpythonicな方法は単に例外を処理することだと思いますが、これはN + 1の問題に遭遇しますか? 名前を主キーとして使用することで、インデックスを使用してエンティティにアクセスするたびにクエリを作成していることに気付きました。ポニーにシーケンシャル ID を選択させるだけでは、クエリを実行する必要はないようです。大規模なデータセットでこれをまだテストしていないため、まだベンチマークしていません。

0 投票する
1 に答える
139 参照

python - ponyorm との多対多リレーションの場合のレコードの選択方法

私はponyormが初めてです。

これらの 2 つのクラスがあり、それらの間に多対多の関係があるとします。

そして、特定の学生が従うコースをいくつか選択したいと思います。私がすることは:

そして、私はこのエラーを受け取ります:

これを行う正しい方法は何ですか?ありがとう

0 投票する
1 に答える
1237 参照

python - PonyORM (Python) 「現在のトランザクションの外部で値が更新されました」が、そうではありませんでした

ディスク上の Sqlite3 データベースで Pony ORM バージョン 0.7 を使用していますが、この問題が発生しています。

問題を引き起こすコマンドの最小セットに問題を減らしました (つまり、何かを削除すると問題は発生しなくなります)。

完全を期すために、ここに の定義を示しTaskます。

また、select から制約を外すとtask.order_id == 2問題が発生しなくなるので、トランザクションが開始されてから変更されたフィールドに基づいてクエリを実行することと関係があると思いますが、理由はわかりませんエラーメッセージは、別のトランザクションによって変更されたことを示していますdb.execute(生のSQLであるために別のトランザクションで実行されている可能性がある場合を除きますか?)

私はすでにこの同様の質問を見てきましたが、問題は異なっていました (ポニー ORM レポート レコードは「現在のトランザクションの外部で更新されました」が、他のトランザクションはありません) およびこのドキュメント ( https://docs.ponyorm.com/ transactions.html ) しかし、どちらも私の問題を解決しませんでした。

ここで何が起こっているのでしょうか?