2017-12-12 9 views
0

このスクリプトでは、JSON入力を引数として使用し、コマンドラインから実行する必要があります。私はさらに、機密返すようにcount_stock.pyを利用するスクリプトを記述する必要が 値を返す[(9)] : Pythonのcount_stock.py「{1 『商品コード』:}」として例えば が実行されてもよいです データベース内の情報。新しいスクリプトは、直接DBと通信してはならないcount_stock.pyスクリプト外部エンドユーザからSQLデータベースへのAPI呼び出しをシミュレート

import sys, sqlite3, json 
company_db_file = 'company_data.db' 
conn = sqlite3.connect(company_db_file) 
c = conn.cursor() 
for arg in sys.argv[1:]: 
    input_json = json.loads(arg) 
    c.execute("SELECT amount FROM product WHERE id = " + str(input_json['productId'])) 
    sys.stdout.write(str(c.fetchall())+ "\n") 
conn.commit() 
conn.close() 

答えて

1

str関数は、引数を囲む引用符を入れて表示されませんが、それだけでここcount_stock.py

を呼び出す必要がありますしたがって、コマンドラインで必要なSQLを渡すことができます。たとえば...

python count_stock.py '{"productId":"1 or 1 = 1"}' 

この

は、このSQLを実行する必要があります

SELECT amount FROM product WHERE id = 1 or 1 = 1 

このクエリは、「ID」フィルタを無視し、テーブル内のすべての行を返します。

+0

さらに2つのテーブルがありますが、代わりにプレースホルダを使用するとどのようにこれらの詳細にアクセスできますか? @David – 1111

+0

"; select * from table"を渡すと、データベースに対して複数のクエリを実行できます。別のオプションは、 'UNION'演算子を使用して結果に別のテーブルを追加することです。 – David

+0

すごく、ありがとう。 – 1111

関連する問題