2013-11-21 69 views
-1

我有一個Python腳本需要3個值,並將一行寫入SQL文件以將這些值插入數據庫。我被特別告知我可能不會使用csv作家。假設我有寫入文件時不會顯示某些字符

sqlfile = open("./sqlfile.sql", "wb") 

我使用寫插入線的命令如下:

line = "insert into `mytable`(`value1`,`value2`,`value3`) values (\"" + variable1 + "\",\"" + variable2 + "\",\"" + variable3 + "\");\n" 
sqlfile.write(line) 

(值得注意的是所有三個都是字符串值)在這個例子中我將設置變量1 = AAA ,variable2 = BBB,variable3 = CCC。當它運行時,腳本打印如下:

insert into `mytable`(`value1``value2``value3`) values ("AAA"BBBCCC); 

換句話說,沒有逗號打印。更令人沮喪的是,報價打印,但只有第一組 - 第二和第三組被忽略,就像逗號。我也試過做類似variable1 + "\"" + "," + "\"" + variable2,以及與\,而不是隻是,但是這也沒有工作。令人沮喪的是我寫了這個項目中的其他文件,並使用逗號和引號,並且它以前工作過。我對Python非常陌生,特別是使用它來寫入和從文件寫入,所以我不知道爲什麼發生這種情況。我對網絡的初步搜索也沒有多大幫助。有人有建議嗎?謝謝!

另外,我一次只寫了一個部分就嘗試了這種方法,但那也沒用。

+0

爲什麼在二進制模式下打開文件? –

+0

我用'w'和'wb'試過了,都不行。那只是我嘗試過的最新版本。 – thnkwthprtls

+0

奇數。這些逗號應該寫成。文件模式應該沒有區別。你確定這是*確切*代碼? (另外,使用'format'可以很好地清理它。) – user2864740

回答

1

您的線條粘貼在這裏,是正確的。

你可以看到它運行在repl.it。輸出是:

Python 2.7.2 (default, Jul 20 2011, 02:32:18) 
[GCC 4.2.1 (LLVM, Emscripten 1.5, Empythoned)] on linux2 

insert into `mytable`(`value1`,`value2`,`value3`) values ("AAA","BBB","CCC"); 

不過,也有多種方式,你可以已經得到了這個錯誤在您的實際代碼,這將是幾乎不可能被發現,因爲你已經選擇了至少可讀(可寫)方法去做這個。

如果你想在一個字符串雙引號,而不是逃避的報價,只使用單引號的字符串:

line = 'insert into `mytable`(`value1`,`value2`,`value3`) values ("' + variable1 + '","' + variable2 + '","' + variable3 + '");\n' 

,或者甚至更好,擺脫了字符串連接的,所以你不要「T不得不處理與報價所有這些短字符串引號內:

line = 'insert into `mytable`(`value1`,`value2`,`value3`) values ("{}","{}","{}");\n'.format(variable1, variable2, variable3) 

這些變化無論是解決問題在發佈代碼,因爲有在當前的代碼沒有問題。但是它很可能會解決實際代碼中的問題,因爲在實際代碼中可能發生的許多錯誤中的任何一個都很難做出來,並且如果確實做到了,就更容易發現。

+0

我試過第一個解決方案,似乎給出正確的輸出,謝謝。仍然不知道爲什麼它不工作,這實際上是我改變的唯一的事情,但只要它的工作,這是重要的哈哈 – thnkwthprtls

+0

@thnkwthprtls:我100%確定你的原始代碼不工作,因爲它沒有和你在這裏發佈的代碼一樣。事實上,你可以盯着他們,仍然沒有發現任何分歧並不能證明你正確地複製了它,這是你不應該以這種方式編寫代碼的原因的一個例證。 – abarnert

-3

也許嘗試關閉該文件? 甚至更​​好,使用上下文管理器?

with open(<path>, <mode>) as f: 
    f.write("abc") 

如果您不知道這意味着什麼 - 嘗試使用Google搜索。

+0

我知道它是什麼意思,我只是嘗試過這種格式,但也沒有工作。關閉它也沒有。 – thnkwthprtls

+2

他絕對_does_需要解決這個問題;否則他可能會得到一個空的或不完整的文件。 (該文件在被關閉之前不會被刷新,如果你沒有明確地關閉它,直到最後一個引用被刪除,它纔會被關閉,並且Python不保證在關閉時乾淨地刪除所有引用。)但是,這顯然是一個分離的問題,而不是他所問的問題。沒有辦法讓文件不被刪除可以從他寫的內容中刪除引號和逗號......所以,這是一個評論,而不是一個答案。 – abarnert