您的字符串值包含\r
回車符。該字符指示打印位置到行的開頭。您可以通過打印repr()
function的輸出來驗證這一點,該輸出對任何不是可打印的ASCII字符的字符使用Python轉義序列。
刪除TimeStamp
值中的字符;你可以使用str.replace()
要做到這一點,例如:
TimeStamp = TimeStamp.replace('\r', '')
演示:
>>> value, TimeStamp = 41, '8\r,15-08-2015 20:28:47'
>>> print "insert into Log(ComponentId, Value, TimeStamp) OUTPUT INSERTED.ID VALUES(8,{0},{1})".format(value, TimeStamp)
,15-08-2015 20:28:47)nentId, Value, TimeStamp) OUTPUT INSERTED.ID VALUES(8,41,8
>>> TimeStamp = TimeStamp.replace('\r', '')
>>> print "insert into Log(ComponentId, Value, TimeStamp) OUTPUT INSERTED.ID VALUES(8,{0},{1})".format(value, TimeStamp)
insert into Log(ComponentId, Value, TimeStamp) OUTPUT INSERTED.ID VALUES(8,41,8,15-08-2015 20:28:47)
請注意,你的價值仍然包含逗號!您可能在之前的某個文件或其他來源解析這些數據時出錯。
此外,使用字符串格式化插入數據到一個SQL語句是不是一個好主意。改用SQL參數。根據您的數據庫適配器上,這將意味着你在查詢中使用?
或%s
作爲佔位符,數據庫適配器將然後正確報價值,以防止SQL注入攻擊,並允許在查詢處理優化技術:
cursor.execute(
"insert into Log(ComponentId, Value, TimeStamp) OUTPUT INSERTED.ID VALUES(8,?,?)",
(value, TimeStamp))
有關詳細信息,請參閱您的數據庫適配器文檔。
你能告訴我們你的腳本嗎?這可能是因爲您將輸出重定向到一個文件中,而其他內容也正在寫入該文件或任何類似的情況。 –
我會100%確定'print(repr(Timestamp))'會給 - ''8 \ r,15-08-2015 20:28:47''。你能檢查出來嗎?如果是這樣,'\ r'是問題,它將光標移回行首。或者'print(repr(value))'給出''41,8'r''。 –
TimeStamp變量中是否有任何控制字符? – AlG