2017-04-05 16 views
0

このSQLクエリの最後から2番目の行の数値を変数に置き換える安全な方法は何ですか?長いSQL文字列のPython変数

私の変数はcustomer_idです。 2の代わりに{}を使用し、この文字列の最後に.format(customer_id)を入れることはできますか? thebjornで述べたように

unlicensed_query = """ 
    SELECT SUM(x.quantity), SUM(x.quantity * p.list_price) 
     FROM (
     SELECT cu.customer_id, cu.product_id, cu.quantity 
     FROM csi_usage cu LEFT JOIN csi c 
     ON cu.customer_id = c.customer_id 
     AND cu.product_id = c.product_id 
     WHERE c.product_id IS NULL 
     AND cu.customer_id = 2) x, product p 
     WHERE x.product_id = p.id; 
    """ 
+0

このデータベースはどこですか? – thebjorn

+0

mysqlですが、クエリは次のようにsqlalchemyで実行されます:self.session.execute(unlicensed_query).fetchall()[0] – Casey

+3

ここを見てください:http://docs.sqlalchemy.org/ja/latest/core/tutorial.html #specify-bound-parameter-behaviors – thebjorn

答えて

2

、これを行うための正しい方法は、バインドされたパラメータ(http://docs.sqlalchemy.org/en/latest/core/tutorial.html#specifying-bound-parameter-behaviors)を使用することです。例はここにあります:

from sqlalchemy.sql import text 
fully_utilized_query = text(""" 
    SELECT SUM(x.quantity) 
      FROM (
      SELECT cu.customer_id, cu.product_id, cu.quantity 
      FROM csi_usage cu 
      JOIN csi c 
      ON cu.customer_id = c.customer_id 
      AND cu.product_id = c.product_id 
      AND cu.quantity = c.licence_qty 
      WHERE cu.customer_id = :customer_id) x; 
    """) 
fully_utilized = self.session.execute(fully_utilized_query, {'customer_id': current_user.customer_id}).scalar() 
関連する問題