python
  • postgresql
  • 2017-03-14 64 views 0 likes 
    0

    我有一項任務是使用python語言中的psycopg2庫將數據從一個數據庫表複製到另一個數據庫表。如何在日期列中設置日期值或sql格式化查詢字符串中的空值

    現在從第一個數據庫獲取一行後,我不得不將行插入到第二個數據庫表中,但我面對的問題是我需要格式化查詢並從變量中插入日期列的值,可能沒有一個日期值,所以我的查詢是這樣的:

    cur.execute("""update table_name set column1 = '%s', column2 = '%s',column_date = '%s'""" % (value1, value2, value_date)) 
    

    將現在value_date可能是dateNone值,所以如何我轉換這個None價值爲sql null什麼讓它可以存儲在日期列中。

    注意:考慮到value1,value2value_date是包含值的變量。

    回答

    2

    Psycopg將Python None改編爲Postgresql null。沒有必要做任何事情。如果在Python端沒有處理跳過步驟和表之間直接更新:

    cur.execute(""" 
        update t1 
        set column1 = t2.c1, column2 = t2.c2, column_date = t2.c3 
        from t2 
        where t1.pk = t2.pk 
    """ 
    

    這是如何傳遞dateNone到Psycopg:

    from datetime import date 
    
    query = ''' 
        update t 
        set (date_1, date_2) = (%s, %s) 
    ''' 
    # mogrify returns the query string 
    print (cursor.mogrify(query, (date.today(), None)).decode('utf8')) 
    cursor.execute(query, (date.today(), None)) 
    
    query = 'select * from t' 
    cursor.execute(query) 
    print (cursor.fetchone()) 
    

    輸出:

    update t 
    set (date_1, date_2) = ('2017-03-16'::date, NULL) 
    
    (datetime.date(2017, 3, 16), None) 
    
    +0

    您的意思是,如果我的查詢結果如下: cur.execute(「」「update table_name set column1 ='%s',column2 ='%s',column_date ='%s'」「」%('名稱','lasname',None)) willl它工作嗎? –

    +0

    @WalidMashal是的,它會工作。 –

    +0

    tnx的幫助,我會讓你知道當我嘗試 –

    相關問題