0
請幫助使用列類型TIMESTAMPTZ更新表。Python 3如何更新TIMESTAMPTZ?
表像在控制檯
('syntax error at or near "10"\nLINE 5: last_update = 2017-07-28 10:17:55.523070')
請幫助使用列類型TIMESTAMPTZ更新表。Python 3如何更新TIMESTAMPTZ?
表像在控制檯
('syntax error at or near "10"\nLINE 5: last_update = 2017-07-28 10:17:55.523070')
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
更多信息,如果您有'LAST_UPDATE TIMESTAMPTZ DEFAULT NOW()'你不需要'SET'指定列。 「DEFAULT」的全部意思是你可以省略設置它? – Risadinha
你真的不應該手動格式化你的查詢字符串。 ['cur.execute'](http://initd.org/psycopg/docs/cursor.html#cursor.execute)方法能夠轉義您的數據。 – Kendas