python-2.7
  • psycopg2
  • postgresql-9.3
  • 2016-04-21 35 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() 
    

    此代碼的工作,當然,但不是我想要的方式。它更新了整個列'價格',這是很好的,但它只是通過使用'數據'的最後一個值(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)),我敢打賭,您將獲得充滿價格列的數據元組中的第一個值。

    相關問題