2013-11-21 32 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