我正在尝试执行一个简单的查询,稍后我会将其写入docx。查询看起来像这样:
db_con = DB_CONNECTION()
with db_con.cursor() as cursor:
cursor.execute("Select " + column + "
FROM table.example
WHERE code = '" + requirement +"' AND " + column + " != '';")
rows = []
for row in cursor.fetchall():
rows.append(str(row)[2:-4])
return rows
在本例中,返回的所有行都是已收集的注释。其中一些包含换行符。在数据库中,换行符保存为"n"
。使用pyodbc获取它们会导致它们返回为"\n"
,在某些情况下返回为"\\n"
。(即使是同一行,也可以在这两个选项之间切换)
有人知道pyodbc为什么这样做吗?或者我怎样才能避免这种情况?
我丑陋的解决方案是写一个函数,它搜索"\"
,如果找到->搜索更多相邻的反斜杠,并将它们全部替换为单个反斜杠。
谢谢你的帮助!
Python的表示包含反斜杠的字符串,您可能会感到困惑。
>>> backsl = chr(0x5c) # string containing a single backslash
>>> hello = "Hello" + backsl + "n" + "world!"
>>> # printing the string looks normal
>>> print(hello)
Hellonworld!
>>> the default string *representation* doubles up the backslash
>>> hello
'Hello\nworld!'
>>> str(hello)
'Hello\nworld!'
# if you call `repr()` and then print() or str() that then the backslashes get doubled again
>>> rep = repr(hello)
>>> print(rep)
'Hello\nworld!'
>>> rep
"'Hello\\nworld!'"
>>> str(rep)
"'Hello\\nworld!'"
请注意,只是将一个值转储到控制台-例如,>>> hello
-会对它执行隐式的str()
。