2016-05-18 9 views
11

私はいくつかの独立したステートメントを実行するためにSQLAlchemy Coreを使用しています。 ステートメントはテーブルを分離するもので無関係です。そのため私は、渡されたのparamsの複数の辞書を標準table.insert()を使用することができない今、私はこれやってる:。SQLAlchemy Coreで複数の独立した文を実行しますか?

sql_conn.execute(query1) 
sql_conn.execute(query2) 

を私は2つを必要とするのではなく、1回のショットでこれらを実行することができますどのような方法がありますDBに戻ったり来たりしますか?私はMySQL 5.7とPython 2.7.11を使用しています。

+0

2つのステートメントを一緒に実行するのはなぜでしょうか?または何が利益になるでしょうか? –

+2

@MauroBaraldi 2回ではなくDBへの1回のラウンドトリップ。 – univerio

+0

1つのステートメントが失敗すると、誰も実行されません。独立したステートメントを使用すると、より多くの制御ができ、デバッグが容易になります。 –

答えて

0

一度に2つのクエリを実行することは賢明でも実用的でもありません。

"SQLインジェクション"で厄介なことをする別の方法を与えることは、賢明ではありません。

一方、可能ではありますが、必ずしも実際的ではありません。任意の数の関連する(または無関係な)クエリを含むストアドプロシージャを作成します。その後、CALLその手順。 それが実用的でないかもしれないいくつかのものがあり:内のデータを取得する

  • 唯一の方法は、スカラー引数の有限数を経由しています。
  • 出力は複数の結果セットとして戻されます。何が起こったかを見るためには、コードを別々にする必要があります。

MySQLサーバーと同じマシン上にある場合、ラウンドトリップレイテンシはで有意ではないです。 2つのサーバーが同じデータセンターにあっても、通常無視できます。クライアントとサーバーが離れていると、待ち時間が重要になります。大西洋横断の待ち時間のために、我々は100ms以上話している。ブラジルから中国までは約250msです。 (私たちは木星に住んでいないのでうれしいです)

+0

クエリが私によって定義されていて、適切なパラメータ化を行っている場合、SQLインジェクションのリスクはありません。私たちのための余分な時間が50ミリ秒でさえ大したことです。それが私が質問した理由です。もちろん、SQLAlchemy Coreの代わりに生のSQLを使用するだけで、両方のクエリを同時に簡単に送信できるようにする必要があります。そのため、質問は特にSQLAlchemy Coreを通じてこれを行うことです。 – Eli

関連する問題