2016-03-03 71 views
1

我有点好奇什么是pythonic /最好的方式来解决我的问题。pymssql utf8:查询反斜杠

一个简短的代码示例:

import pymssql 
conn = pymssql.connect("SERVER", 'sa', 'PASSWORD', 'DATABASE', charset='utf8') 

cursor = conn.cursor() 

sql = "SELECT 'foo\bar' as bs_field" 
cursor.execute(sql) 
row = cursor.fetchone() 
print row[0] 
# missing \, returns u'foobar' 

sql = "select FIELD_CONTAINING_BACKSLASH from TABLE" 
cursor.execute(sql) 
row = cursor.fetchone() 
print row[0] 
# all OK here 

sql = "SELECT 'foo\\bar' as bs_field" 
cursor.execute(sql) 
row = cursor.fetchone() 
print row[0] 
# this is OK too 

我想知道为什么\丢失在第一个例子 - 有没有更好的解决方案,报价每一个SQL?

回答

1

我是个白痴!

与mssql无关,它只是python字符串。

r'bla\bla' 
'bla\\bla' 

参考:https://docs.python.org/2.0/ref/strings.html

+0

的确。请注意,在* some *数据库中(例如,MySQL的默认设置和PostgreSQL的旧版本),反斜杠确实很特殊,您需要编写'r'SELECT'foo \\ bar'“'或'”SELECT'foo \\\\吧'“'。这不是符合ANSI SQL标准的行为,SQL Server也不这样做,但混淆是使用参数化查询而不是SQL字符串文字的另一个好理由。 – bobince

+0

的确,我大部分时间都在使用这些功能,但是如果您忘记了python的基础知识,它并没有帮助:-) –