2017-07-28 61 views
0

請幫助使用列類型TIMESTAMPTZ更新表。Python 3如何更新TIMESTAMPTZ?

表像在控制檯

('syntax error at or near "10"\nLINE 5: last_update = 2017-07-28 10:17:55.523070') 
+0

cur.execute(""" UPDATE table SET last_update = %(last_update)s, table_tracking = %(table_tracking)s WHERE id = %(id)s; """, { "last_update": last_update, "table_tracking": tracking, "id": id, } ) 

更多信息,如果您有'LAST_UPDATE TIMESTAMPTZ DEFAULT NOW()'你不需要'SET'指定列。 「DEFAULT」的全部意思是你可以省略設置它? – Risadinha

+0

你真的不應該手動格式化你的查詢字符串。 ['cur.execute'](http://initd.org/psycopg/docs/cursor.html#cursor.execute)方法能夠轉義您的數據。 – Kendas

回答

1

cur.execute("SET TIMEZONE='US/Pacific'; SELECT Now()") 
time_db = cur.fetchall() 

last_update = time_db[0][0] 

     cur.execute(""" 
      UPDATE table 
      SET 
       last_update = {}, 
       table_tracking = {} 
      WHERE id = {}; 
     """.format(last_update, tracking, id)) 

error.args這

table(
      table_id SERIAL PRIMARY KEY, 
      table_name VARCHAR(35) NOT NULL, 
      last_update TIMESTAMPTZ DEFAULT Now(), 
      table_link VARCHAR(70) NOT NULL, 
      table_tracking BOOLEAN DEFAULT TRUE, 
      url VARCHAR(225) NOT NULL    
     ) 

代碼更新表這裏的問題是,2017-07-28 10:17:55.523070被解釋爲一個算術表達式 - 2017 - 7 - 28 == 1982。當它到達10:17:55.523070部分時,解析器不知道如何處理它。

爲了將其解釋爲TIMESTAMPZ值,您需要將其轉義爲'2017-07-28 10:17:55.523070'。但是,由於各種原因,手動執行此操作並不合適。你的數據庫連接包應該爲你做:在documentation