ループから複数のパラメーターを使用してsqlalchemy削除クエリを作成する方法

WyllianNeo

私はPythonとsqlalchemyが初めてです。where条件を手動で作成すると、すでにdeleteメソッドが機能しています。ここで、yaml形式のenterリクエストから列と値を読み取り、where条件を作成する必要があります。

#enter data as yaml
items:
    - item:
        table: [MyTable,OtherTable]
        filters:
            field_id: 1234
            #other_id: null

これが私が試みて先に進めないことです:

for i in use_case_cfg['items']:
    item = i.get('item')
    for t in item['table']:
        if item['filters']:
            filters = item['filters']
            where_conditions = ''
            count = 0
            for column, value in filters.items():
                aux = str(getattr(t, column) == bindparam(value))
                if count == 0:
                    where_conditions += aux
                else:
                    where_conditions += ', ' + aux
                count += 1
            to_delete = inv[t].__table__.delete().where(text(where_conditions))
                #to_delete = t.__table__.delete().where(getattr(t, column) == value)
        else:
            to_delete = inv[t].__table__.delete()
        CoreData.session.execute(to_delete)

私には問題ないように見えますが、実行すると次のエラーが発生します:sqlalchemy.exc.StatementError:(sqlalchemy.exc.InvalidRequestError)バインドパラメーター「9876」に値が必要です[SQL:DELETE FROM MyTableWHERE "MyTable" .field_id =%(1234)s] [parameters:[{}]](このエラーの背景:http//sqlalche.me/e/cd3x

誰かが私に何が間違っているのか、それを行う適切な方法を説明できますか?ありがとう。

snakecharmerb

コードには2つの問題があります。

まず、

str(getattr(t, column) == bindparam(value))

プレースホルダーとして値をバインドしているため、

WHERE f2 = :Bob

しかし、それはの値にマップされる名前でなければならないfiltersので(あなたの場合は列名)、最終的には

WHERE f2 = :f2

次に、複数のWHERE条件がコンマで結合されていますが、実行しようとしていることに応じて、ANDまたはを使用する必要がありますOR

与えられたモデルFoo

class Foo(Base):
    __tablename__ = 'foo'

    id = sa.Column(sa.Integer, primary_key=True)
    f1 = sa.Column(sa.Integer)
    f2 = sa.Column(sa.String)

コードのセグメントの動作バージョンは次のとおりです。

filters = {'f1': 2, 'f2': 'Bob'}
t = Foo

where_conditions = ''
count = 0
for column in filters:
    aux = str(getattr(t, column) == sa.bindparam(column))
    if count == 0:
        where_conditions += aux
    else:
        where_conditions += ' AND ' + aux
    count += 1
to_delete = t.__table__.delete().where(sa.text(where_conditions))
print(to_delete)
session.execute(to_delete, filters)

WHERE条件を文字列として作成する義務がない場合は、次のように実行できます。

where_conditions = [(getattr(t, column) == sa.bindparam(column))
                    for column in filters]
to_delete = t.__table__.delete().where(sa.and_(*where_conditions))
session.execute(to_delete, filters)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ループを使用してデータクエリから複数のテーブルを作成する方法

分類Dev

Breeze-クライアントからの複数のパラメータを使用して複雑なクエリを作成する

分類Dev

golangアプリケーションで複数のJSONパラメーターを使用してSQLクエリを作成する方法

分類Dev

Javascriptを使用して複数のパラメータを持つ配列から重複を削除する方法

分類Dev

複数の検証を使用してプロパティから単一のエラーを削除する方法

分類Dev

JAVA / Groovyを使用してJmeter HTTPサンプラーから空のHTTPリクエストパラメータを削除する方法

分類Dev

URLSearchParamsを使用して空のクエリパラメータを削除する方法

分類Dev

同じタイプの複数のパラメーターを使用してGETリクエストのURIパターンを定義する方法

分類Dev

動的な数のパラメーターを使用してEFCoreで生のSQLクエリを作成する方法

分類Dev

Spring-MVCで複数のパラメーターを使用してリクエストを処理する方法

分類Dev

複雑なWordPressOrderbyパラメーター:meta_value_numを使用して複数のorderbyパラメーターでクエリを実行する方法は?

分類Dev

.htaccessを使用してクエリパラメータから最後のスラッシュを削除する

分類Dev

django RESTフレームワークを使用してGETリクエストのクエリパラメータから複数のIDをフィルタリングする方法は?

分類Dev

複数のパラメーターを使用してlinq式を作成する方法

分類Dev

複数のパラメータを使用してYiiURLルートを作成する

分類Dev

VisualStudioでMartenを使用してLinqを使用して複数のパラメーターをクエリする

分類Dev

Javaスクリプトを使用して現在のURLから複数のURLパラメータを取得する方法

分類Dev

クエリパラメータからルートを作成する方法

分類Dev

複数のパラメータを使用してXMLファイルをクエリする

分類Dev

複数のPHPGETパラメーターからSQLSELECTクエリを作成します

分類Dev

jquery / ajaxリクエストを使用してRailsコントローラーから複数のパラメーターをレンダリングします

分類Dev

クエリ文字列で複数のパラメータを使用するPhoenixルートを設定する方法

分類Dev

Angular2UrlSearchParams括弧付きの同じパラメータの複数の値を使用してURLクエリを作成する方法

分類Dev

シェルスクリプトのパラメータを使用して複数のディレクトリを作成する

分類Dev

複数のテーブル/ DBSからのパラメータを使用したLinq-to-Entitiesクエリ結果

分類Dev

関数からのパラメーターを使用して新しいクラスを作成する

分類Dev

2パラメータフィルター(角度)を使用してオブジェクトから複数のオブジェクトを削除します

分類Dev

「-with-rtsopts」を使用して複数のパラメータをエスケープする方法

分類Dev

スクラップを使用して複数ページからデータをクロールする方法は?

Related 関連記事

  1. 1

    ループを使用してデータクエリから複数のテーブルを作成する方法

  2. 2

    Breeze-クライアントからの複数のパラメータを使用して複雑なクエリを作成する

  3. 3

    golangアプリケーションで複数のJSONパラメーターを使用してSQLクエリを作成する方法

  4. 4

    Javascriptを使用して複数のパラメータを持つ配列から重複を削除する方法

  5. 5

    複数の検証を使用してプロパティから単一のエラーを削除する方法

  6. 6

    JAVA / Groovyを使用してJmeter HTTPサンプラーから空のHTTPリクエストパラメータを削除する方法

  7. 7

    URLSearchParamsを使用して空のクエリパラメータを削除する方法

  8. 8

    同じタイプの複数のパラメーターを使用してGETリクエストのURIパターンを定義する方法

  9. 9

    動的な数のパラメーターを使用してEFCoreで生のSQLクエリを作成する方法

  10. 10

    Spring-MVCで複数のパラメーターを使用してリクエストを処理する方法

  11. 11

    複雑なWordPressOrderbyパラメーター:meta_value_numを使用して複数のorderbyパラメーターでクエリを実行する方法は?

  12. 12

    .htaccessを使用してクエリパラメータから最後のスラッシュを削除する

  13. 13

    django RESTフレームワークを使用してGETリクエストのクエリパラメータから複数のIDをフィルタリングする方法は?

  14. 14

    複数のパラメーターを使用してlinq式を作成する方法

  15. 15

    複数のパラメータを使用してYiiURLルートを作成する

  16. 16

    VisualStudioでMartenを使用してLinqを使用して複数のパラメーターをクエリする

  17. 17

    Javaスクリプトを使用して現在のURLから複数のURLパラメータを取得する方法

  18. 18

    クエリパラメータからルートを作成する方法

  19. 19

    複数のパラメータを使用してXMLファイルをクエリする

  20. 20

    複数のPHPGETパラメーターからSQLSELECTクエリを作成します

  21. 21

    jquery / ajaxリクエストを使用してRailsコントローラーから複数のパラメーターをレンダリングします

  22. 22

    クエリ文字列で複数のパラメータを使用するPhoenixルートを設定する方法

  23. 23

    Angular2UrlSearchParams括弧付きの同じパラメータの複数の値を使用してURLクエリを作成する方法

  24. 24

    シェルスクリプトのパラメータを使用して複数のディレクトリを作成する

  25. 25

    複数のテーブル/ DBSからのパラメータを使用したLinq-to-Entitiesクエリ結果

  26. 26

    関数からのパラメーターを使用して新しいクラスを作成する

  27. 27

    2パラメータフィルター(角度)を使用してオブジェクトから複数のオブジェクトを削除します

  28. 28

    「-with-rtsopts」を使用して複数のパラメータをエスケープする方法

  29. 29

    スクラップを使用して複数ページからデータをクロールする方法は?

ホットタグ

アーカイブ