2017-03-18 3 views
0

PostgreSQLを初めて使用しています。 Psycopg2とPostgreSQL 9.5.6を使用しています。私の更新SQLは今のように見えます。 Psycopg2を使用して、複数の列をPythonのタプルリストで更新したいとします。複数の列をPythonのタプルのリストで置き換えるPsygopg2

update_sql = ''' 
      UPDATE my_table 
      SET size = n, mean = m, std_pop = std 
      FROM unnest(%s) s(my_id integer, n integer, m double precision, std double precision) 
      WHERE my_table.id = s.my_id; 
     ''' 

は例えば、私はPythonでタプル(ID、new_size、new_mean、new_std)の次のPythonリストを持っている:私は、テーブルに入れ、すべての3つの列を更新したい

new_column_values =[(0,10,9.0,8.0),(1,10,9.0,8.0),(2,10,9.0,8.0)] 

同時に:

+----+------+------+---------+ 
| id | size | mean | std_pop | 
+----+------+------+---------+ 
| 0 | 0 | 0 |  0 | 
| 1 | 0 | 0 |  0 | 
| 2 | 0 | 0 |  0 | 
+----+------+------+---------+ 

これは、複数の列を更新する最もよい方法でしょうか?今すぐエラーを返します:

倍精度を期待していますが、解決方法はわからない数値型があります。私のの平均値はです。std_popの列は倍精度の列です。何が起きてる?

+0

関連するPythonコードを投稿してください。 –

+0

@ClodoaldoNeto Pythonコードには多くの依存関係がありますが、実際にどのように解決するかを考えます。私は単に '倍精度'を '数値'に置き換えますが、それは私がそれらの列を「倍精度」として宣言したため、私には直感的ではありません。 – Dobob

答えて

0

私はこの問題を解決しました。

私の更新クエリで倍精度の数値に変更され、問題が解決しました。しかし、数値倍精度で列を宣言したときに、なぜそれを使用しなければならないのか理解できません。

update_sql = ''' 
     UPDATE my_table 
     SET size = n, mean = m, std_pop = std 
     FROM unnest(%s) s(my_id integer, n integer, m numeric, std numeric) 
     WHERE my_table.id = s.my_id; 
    ''' 

たぶん誰かがそれが数値なく倍精度なければならない理由を説明することができますか?

関連する問題