python-2.7
  • psycopg2
  • postgresql-9.3
  • 2016-04-21 6 views 0 likes 
    0

    まず更新、私のスクリプトがあります:はPostgreSQLのタプルからデータを列全体(psycopg2)すべての

    import psycopg2 
    import sys 
    
    data = ((160000,), 
         (40000,), 
         (75000,), 
         ) 
    
    def main(): 
        try: 
         connection = psycopg2.connect("""host='localhost' dbname='postgres' 
                 user='postgres'""") 
         cursor = connection.cursor() 
         query = "UPDATE Planes SET Price=%s" 
         cursor.executemany(query, data) 
         connection.commit() 
    
        except psycopg2.Error, e: 
         if connection: 
          connection.rollback() 
         print 'Error:{0}'.format(e) 
    
        finally: 
         if connection: 
          connection.close() 
    
    if __name__ == '__main__': 
        main() 
    

    このコードのコースの作品ではなく、私が好きな方法インチこれは良い 'Price'列全体を更新しますが、 'data'(75000)の最後の値を使用することによってのみ更新されます。

    (1, 'Airbus', 75000, 'Public') 
    (2, 'Helicopter', 75000, 'Private') 
    (3, 'Falcon', 75000, 'Military') 
    

    私の欲求の出力は次のようになります。私はそれを修正することができますどのように、

    (1, 'Airbus', 160000, 'Public') 
    (2, 'Helicopter', 40000, 'Private') 
    (3, 'Falcon', 75000, 'Military') 
    

    答えて

    0

    デバッグするために自分のマシンにデータベースをセットアップしないと、私は確信が持てませんが、クエリが問題であるようです。あなたは

    UPDATEプレーンを実行すると設定した価格=%sの

    私はそれはあなたのデータの組からの反復された値を持つ列全体を更新していると思うだろう。代わりに、あなたは辞書

    ({'name':'Airbus', 'price':160000}, {'name':'Helicopter', 'price':40000}...)

    にタプルを必要と

    """UPDATE Planes SET Price=%(price)s WHERE Name=%(name)s"""にクエリを変更する場合があります。

    同様の処方については、this articleの最下部を参照してください。これが本当に問題であることを確認するには、一度だけクエリを実行すると(cursor.execute(query))、データタプルの最初の値でいっぱいの価格列が表示されます。

    関連する問題