How to write a string that could be None to '%s' to a file (python)
我正在尝试将字符串写入文件。此文件将是对Microsoft的SQL Server的查询,因此它必须遵循特定的格式。这就是我的问题所在。
假设代码的其余部分是正确的,我有这样的写方法:
1 2 3 4 5 6 | file.write("INSERT INTO SAMPLE_TABLE (int_value, string_value, comment) " "VALUES (%d, '%s', '%s') " % (row["int_value"], row["string_value"], row["comment"])) |
如您所见,我需要在
我可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if row["comment"] is None: file.write("INSERT INTO SAMPLE_TABLE (int_value, string_value, comment) " "VALUES (%d, '%s', %s) " % (row["int_value"], row["string_value"], row["comment"])) else: file.write("INSERT INTO SAMPLE_TABLE (int_value, string_value, comment) " "VALUES (%d, '%s', '%s') " % (row["int_value"], row["string_value"], row["comment"])) |
号
但这是两行代码。如果后来我意识到不止一个值可能是零呢?我要检查每一个箱子!我需要让这个充满活力。
感谢您的帮助。
这个怎么样?
1 2 3 4 5 6 7 | comment_str ="None" if row["comment"] is None else"'{}'".format(row["comment"]) file.write("INSERT INTO SAMPLE_TABLE (int_value, string_value, comment) " "VALUES (%d, '%s', %s) " % (row["int_value"], row["string_value"], comment_str)) |
号
您可以使用任何python mysql模块及其光标选项
1 | cursor.mogrify(query, args) |
。
如果你已经在使用它。它将根据类型正确地避开所有内容。
如果你想手动操作,你可以做一个简单的
1 | row['comment'] if row['comment'] is None else"'".join(['',row['comment'],'']) |
。
在查询之前
不添加引号,然后用带引号的注释替换它(可以用一行进行双重替换),怎么样?
1 2 3 4 | row = {"comment":"abc"} comment = row.get("comment") # Note, bracket lookup would have thrown a KeyError, not returning None values ="%d, '%s', %s" % (1,"string_value","'%s'" % comment if comment is not None else None) print values |
哪个可以打印
然后用
注意,如果只保留
1 2 3 | comment = row.get("comment") # In your string: VALUES = (%s) % ("%d, '%s', %s" % (row["int_value"], row["string_value"],"'%s'" % comment if comment is not None else None)) |
。
下面是一个基本示例:
1 2 3 4 5 6 7 8 9 | >>> comment = None >>> 'Values = (%s)' % ("'%s'" % comment if comment is not None else None) 'Values = (None)' >>> comment ="test" >>> 'Values = (%s)' % ("'%s'" % comment if comment is not None else None) "Values = ('test')" >>> comment ="" # For empty comments, thanks to @Bharel for pointing this out >>> 'Values = (%s)' % ("'%s'" % comment if comment is not None else None) "Values = ('')" |
我会用
1 2 3 4 | >>> 'VALUES (%s)' % repr(None) 'VALUES (None)' >>> 'VALUES (%s)' % repr("string") "VALUES ('string')" |
。
你可以试试
1 2 3 4 5 6 | file.write("INSERT INTO SAMPLE_TABLE (int_value, string_value, comment) " "VALUES (%d, '%s', '%s') " % (row["int_value"], row["string_value"], row["comment"] or 'NULL')) |
为什么不直接插入
1 2 3 4 | if row["comment"] is not None: row["comment"] ="'%s'" % row["comment"] file.write(... |
它提供了您想要的自定义行为,不需要重复任何代码。