2017-12-09 11 views
0

私のpython 3.6のスクリプトが実行され、このことが戻るようpsycopg2を使用して行を追加しようとしたとき、私はしかしのpython 3.6のSQLデータベース接続

CREATE TABLE public.coinbase_btc_usd 
(
    id bigserial primary key, 
    price integer NOT NULL, 
    buy integer NOT NULL, 
    sell integer NOT NULL, 
    "timestamp" timestamp with time zone 
) 

から作成されたテーブルで、私のPostgreSQLデータベースに行を挿入しようとしています「フェッチする結果がありません」というエラーが表示され、dbに何も追加されません。

 sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
       " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\')" 

    print(sql_query) 

    cur.execute(sql_query) 

私はまた、実行しようとなっていた、これは出力に

INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp) VALUES (16392.10, 16563.40, 16235.42, '2015-10-10 06:44:33.8672177') 
+1

ところで、あなたのコードは、SQLインジェクションの対象となり、そしてあなたが –

+0

そこに値を入れて文字列連結を使用すべきではない私ではなかったこと質問人...これはすべてバックエンドであり、それを使っている唯一の人です。私はちょうどこの最後の行をデータベースに挿入できない理由を理解しようとしています。コンソールに印刷したものをpgadminに貼り付け、ちょうど良いものを挿入しました。 – user1771791

+1

私はちょっと言っています。あなたがしていることをしていないドキュメントでは、それに従わない理由は何ですか? http://initd.org/psycopg/docs/sql.html –

答えて

0

変更

sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
      " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\')" 

に印刷された正確に何を見るためにsql_query変数を印刷:

sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
      " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\') returning *" 

これは私の前提でno results to fetchを修正する必要があります。

行が追加されていない場合は、おそらくbeginトランザクションであり、決してコミットしないことがあります。

0

あなたは、トランザクションをコミットしていることを確認します。さらに、SQLインジェクションを防ぐためには何も費用はかかりません

conn.autocommit = True 

cur.execute(sql_query) 
conn.commit() 

それとも、自動実行直後に各クエリをコミットするコミット有効にすることができます攻撃 - パラメータ化されたクエリを使用するだけです。実際にあなたのコードが実際にクリーナーだけでなく、より安全になります。

sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp) VALUES (%s, %s, %s, %s)" 
cur.execute(sql_query, (exchange_rate, buy_rate, sell_rate, timestamp)) 
conn.commit() 
関連する問題